PHP - парсинг чистого текста в строку HTML - PullRequest
3 голосов
/ 17 декабря 2011

У меня есть строка HTML, и я хотел бы сделать некоторое форматирование текста на ее чистом текстовом содержимом. Я имею в виду, я хотел бы извлечь что-нибудь, что является текстом и не включено в фигурные скобки. Но ... Я планировал использовать DOMDocument, но я не знаю ни тегов, которые я ищу, ни их идентификатора.

Например, я могу иметь эту строку

<p><i>some tex<span class="aclass">t</span> in the document.</i>Whoooa <img src="anImage.png" /></p>

И я хотел бы отформатировать строку «некоторый текст в документе. Например, поставить пробел после точки и удалить конечный пробел.

Как бы я это сделал?

Ответы [ 3 ]

2 голосов
/ 17 декабря 2011

Если вообще возможно сделать это на стороне клиента проще с jQuery, это специально сделано для легкой манипуляции с dom. В общем, вам нужно использовать preg_match и / или парсер xml. Я думаю, что есть несколько парсеров dom, но я не помню, включены ли они в php.

1 голос
/ 17 декабря 2011

Я начал создавать класс с именем TextRange, который предоставляет простой интерфейс для текстовых узлов в виде единственного строкового представления определенной DOMDocument детали.

Вам необходимо выяснить, где строка должнаможет быть изменен, и класс TextRange может при необходимости разделить узлы.Я поместил подробное объяснение этого в следующих двух вопросах:

Первый также содержит довольно сырой класс TextRangeTrimmer, который может удалять пробелы в начале и конце такого TextRange.

Поскольку вы только изменяетезначения текстового узла, оригинальные теги всегда сохраняются.Возможно, вам придется позже самостоятельно очистить неиспользуемые (пустые) теги, в зависимости от вашего использования.

Он работает на основе DOMDocument и принимает родителя DOMElement (диапазон будет всем дочерним узлом textnode), xpathрезультат запроса (DOMNodeList) или просто массив элементов текстового узла.

0 голосов
/ 17 декабря 2011

Используйте strip_tags !

$str = '<p><i>some tex<span class="aclass">t</span> in the document.</i>Whoooa <img src="anImage.png" /></p>';
echo strip_tags( $str);

Это выдаст:

string(33) "some text in the document.Whoooa " 

Затем, для остального вопроса:

// Put a space after the point
$str = preg_replace( '/\.([^ ])/', '. $1', $str); 
// and deleting the ending space.
$str = rtrim( $str, ' ');

Демо

...