在我的网站上,我发布了很多用于开发测试的内部跟踪信息。跟踪的内容采用 HTML 格式,这在大多数情况下都很好,但为了支持 AJAX,有时我想将该跟踪数据包含在 XML 文档中。有时 XML 对象存在不匹配的标记,但它仅报告文档中缺少结束标记的位置。这些跟踪文档通常有 10,000 行长,由整个系统的代码生成,因此调试调试信息非常重要。在我当前的问题中,XML 解析报告我缺少结束符
。所以我补充说:
libxml_use_internal_errors(true);
$doc = simplexml_load_string($warn);
$xml = explode("\n", $warn);
if (!$doc) {
$errors = libxml_get_errors();
foreach ($errors as $error) {
echo display_xml_error($error, $xml);
}
libxml_clear_errors();
}
到跟踪数据被发送到标准输出的地方。现在我得到:
<p>User::__construct(Array
-^
Fatal Error 5: Extra content at the end of the document
Line: 2
Column: 1
--------------------------------------------
<div id='debugTrace' class='warning'>
<p>connection established to database server 'mysql:...'.</p>
<p>User::__construct(Array
(
[username] => jcobban
)
)</p>
<p>SELECT * FROM Users WHERE UserName='jcobban'</p><p class='label'>User Record constructed:</p>
... for 9997 more lines
Firefox 中的 XML 解析器和 PHP 简单 XML 都同意缺少结束标记
,但我在生成的文档中看到了结束标记,正如我要求 XML 显示页面源代码时所显示的那样。发出明显违规行的代码行是: $warn .= "<p>User::__construct(" . print_r($parms, true) .
")</p>\n";
那我做错了什么?
最佳答案
CDATA 允许您将字符呈现到 xml 文档中,否则会破坏它。
$warn .= "<p><![cdata[User::__construct(" . print_r($parms, true) .
")]]></p>\n";
有关 SO 的这个非常有用的项目中的更多信息:What does <![CDATA[]]> in XML mean?
关于php - 在 PHP 中查找不匹配的标签时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47024984/