如何转义来自 simplexml_load_file 的数据

How can I escape data coming from simplexml_load_file

simplexml_load_file($htmlstring)

这是我从第三方数据库中提取的简单数据。我们开始拉出一个评论部分,不幸的是,它包含 & 和一些 <,这阻碍了 xml 构建。错误是:

Unescaped '&lt;' not allowed in attributes values

在它尝试构建 XML 集之前,我如何才能获得那些格式不正确的结果并对其进行 CDATA 或其他操作。我找遍了 http://php.net/manual/en/function.simplexml-load-file.php 但似乎没有找到解决方案的智慧!

如果输入文件无效,并且您无法影响第三方修复它,您的选择就相当有限。

可能值得尝试的一件事是使用 DOM in HTML mode 加载文件。这使用了更宽容的解析器,但随后创建了相同的数据结构。

好处是您实际上不必使用如此冗长的 DOM,因为您 can "import" the DOM object into SimpleXML. This doesn't require any re-parsing, because both interfaces use the same data structures internally (libxml).

从那里 - 假设这有效 - 你可以继续,就好像你只是 运行 simplexml_load_file 一样。

所以不是这个:

$sxml = simplexml_load_file($file_path);

你会这样写:

$dom = DOMDocument::loadHTMLFile($file_path);
$sxml = simplexml_import_dom($dom);

然后照原样进行。

(如果你有一个数据字符串而不是文件路径,你将分别使用 simplexml_load_string()DOMDocument::loadHTML()。)