PHP - 在HTML字符串中解析纯文本

时间:2011-12-17 01:41:17

标签: php html parsing tags domdocument

我有一个HTML字符串,我想在其纯文本内容上进行一些文本格式化。我的意思是,我想提取任何文本而不包含在标记括号中的内容。但是......我打算使用DOMDocument,但我不知道我正在寻找的标签,也不知道他们的ID。

例如,我可以拥有该字符串

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

我想在重新注入页面中原始标签格式化的整个文本之前格式化“document.Whoooa”字符串中的一些文本。例如,在点之后放置一个空格并删除结束空格。

我该怎么做?

3 个答案:

答案 0 :(得分:2)

如果可能的话,客户端使用jQuery更容易,它专门用于简单的dom操作。通常,您将需要使用preg_match和/或xml解析器。我认为有一些dom解析器,但我不记得php中是否包含任何解析器。

答案 1 :(得分:1)

我已经开始创建一个名为TextRange的类,它为文本节点提供了一个简单的界面,作为某个DOMDocument部分的单个字符串表示。

您需要找出需要更改字符串的位置,然后TextRange类可以根据需要拆分节点。我在以下两个问题中对它进行了冗长的解释:

第一个类还包含一个非常原始的TextRangeTrimmer类,它可以删除此类TextRange开头和结尾的空格。

由于您只修改文本节点值,因此始终会保留原始标记。您可能需要根据自己的使用情况自行清理未使用的(空)标记。

它基于DOMDocument工作并接受父DOMElement(范围将是所有textnode子项),xpath查询结果(DOMNodeList)或仅接受textnode元素数组。

答案 2 :(得分:0)

使用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, ' ');

Demo