这个问题有很多帖子。我已经完成了所有这些但是我没有像我预期的那样得到解决方案。我需要将XML中的特殊字符转换为html实体。
我试过了,
<?php
$xml="<test>This is a xml file which has special characters < > & in it</test>";
htmlspecialchars($xml, ENT_XML1, 'UTF-8');//it replaces xml tags too
?>
预期输出XML字符串:
<test>This is a xml file which has special characters < $gt; & in it</test>
答案 0 :(得分:1)
这个问题有很多帖子。我已经完成了所有这些,但我没有像我预期的那样得到解决方案。
是的,您认为您所询问的主题已明确定义,并且已在本网站上进行了详细介绍。但是,这并不能防止出错,因为它恰好是白天最好用的。
您在代码示例中写道:
这是一个包含特殊字符的xml文件
你给出以下字符串:
<test>This is a xml file which has special characters < > & in it</test>
但你写的是错的。这是不 XML文件,因为它不是well-formed。
所以这是第一个发生的错误。
你的问题中的下一个错误是你在整个字符串上应用转换函数,虽然你只想在字符串的一小部分上应用它,即这三个字符:
<
抵消54 >
在偏移56处(技术上这是not need to become >
)&
抵消58 所以你 只需要在这些部分上应用这个功能。只是一个示例代码来证明这一点,你不应该把它作为一个&#34;解决方案&#34;,这是为了演示:
foreach ([58, 56, 54] as $offset)
{
$encoded = htmlspecialchars($xml[$offset], ENT_XML1, 'UTF-8');
$xml = substr_replace($xml, $encoded, $offset, 1);
}
正如此示例所示,您选择的编码功能并非完全错误,它正确编码了您要求的字符:
<test>This is a xml file which has special characters < > & in it</test>
(还有其他可以想象的方式,例如使用CData部分<test><![CDATA[This is a xml file which has special characters < > & in it]]></test>
,但这不是重点。)
然而,由于所有这些错误以及这造成的混乱,并不意味着在Stackoverflow上我们不会有现有的Q&amp; A材料明确地解决这个问题。
通过识别所犯的错误来消除困惑,有一个参考资料的曲目,您可以从中选择您的武器:
正如您所看到的,有一个更大的问题和答案列表,并且根据第一个分析,您的XML存在哪些错误,而不是XML,但可能会因为它在视觉上关闭而成为XML对它来说,你应该能够找到一种你最喜欢修复它的方法。
我个人是Tidy extension in PHP的粉丝,可以帮助你完成你的工作:
tidy_repair_string($xml, ['input-xml' => 1, 'output-xml' => 1, 'wrap' => 0]);
您可能希望采用不同的方式。请参阅上面的关联问题,作为更好的搜索字词的开头,并查看其他人对此主题的询问和回答。