我正在尝试使用PHP和SimpleXML来解析XHTML文件,但该文件包含<和>标记不是标记的一部分并导致解析失败(打开和结束标记不匹配)。
如何在解析之前将这些转换为HTML实体而不更改文件或影响标记?
示例:
<p> a < b </p>
会变成:
<p> a < <b> </p>
答案 0 :(得分:2)
简而言之,答案是:你不能用正则表达式解析html。
也许您可以尝试使用另一个不会阻塞<
和>
的xml解析器?
更好的是,不要尝试将xhtml文件解析为xml,因为正如您已经指出的那样,它实际上不是一个xml文件,并且其中包含非法字符。
答案 1 :(得分:1)
正如Martin Jespersen已经说过的,用正则表达式解析(无效或有效)标记是没有好办法的,至少不是用PHP正则表达式。
那就是说, if 你只想找到一种方法来删除
然后你可能会这样做:
$intermediate = preg_replace('/(>[^<>]*)<([^<>]*<)/', '\1<\2', $subject);
$result = preg_replace('/(>[^<>]*)>([^<>]*<)/', '\1>\2', $intermediate);
但是你必须多次运行,直到没有更多的匹配,因为这样一次只会在标签之间捕获一个迷路<
或>
。它也会在<p> a <> b </p>
等伪平衡括号上失败。