如何转义来自 simplexml_load_file 的数据
How can I escape data coming from simplexml_load_file
simplexml_load_file($htmlstring)
这是我从第三方数据库中提取的简单数据。我们开始拉出一个评论部分,不幸的是,它包含 & 和一些 <,这阻碍了 xml 构建。错误是:
Unescaped '<' 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()
。)
simplexml_load_file($htmlstring)
这是我从第三方数据库中提取的简单数据。我们开始拉出一个评论部分,不幸的是,它包含 & 和一些 <,这阻碍了 xml 构建。错误是:
Unescaped '<' 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()
。)