PHP strip_tags和tokenize问题

时间:2011-09-19 14:30:16

标签: php

如果我正在解析类似Apache网站的内容,我会遇到一个似乎难以解决的特定问题。当解析器获得HTML时:

<li><a href="http://xml.apache.org/" title="XML solutions focused on the web">XML</a></li> 
<li><a href="http://xmlbeans.apache.org/" title="XML-Java binding tool">XMLBeans</a></li> 
<li><a href="http://xmlgraphics.apache.org/" title="Conversion from XML to graphical output">XML Graphics</a></li>

失败了。问题似乎是我调用了PHP strip_tags函数,它正确地删除了所有HTML标记。结果(如果它像我预期的那样工作)将是:

XMLXML BeansXML Graphics

此结果将是通过获取此文本并简单地删除所有标记而生成的字符串。幸运的是(以某种方式),strip_tags实际上似乎正确地分隔了文本,给出了:

XML XML Beans XML Graphics

这是我的问题:当我用空格对这个字符串进行标记时,(例如将“”传入strtok第二个参数),这些单词不会被拆分。整个网站都被正确标记,除了这一点。当strip_tags完成后,有没有人知道单词之间可能有什么字符,所以我可以通过它进行标记化?

2 个答案:

答案 0 :(得分:1)

你可能会尝试像

这样的东西
$html = preg_replace('/(>?)\s+</', '\1<', $html);

在标记之前删除任何空格,但我不会依赖于此。您应该考虑使用真正的HTML解析器来完成此任务,或者再考虑一下您所考虑的解析器是否真正产生了您想要的内容。

答案 1 :(得分:0)

如果HTML的标签格式化,则可能是标签而不是空格。由于您正在处理HTML并且它丢失了原始结构的所有外观,因此您始终可以用空格(或者如果需要甚至几个空格)替换所有制表符。然后在标记时可以安全地使用空格。