gpt4 book ai didi

php - 如何使用php转换xml中的特殊字符?

转载 作者:行者123 更新时间:2023-11-28 01:36:45 25 4
gpt4 key购买 nike

关于这个问题的帖子太多了。我已经完成了所有这些,但没有像我预期的那样得到解决方案。我需要将 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 &lt; $gt; &amp; in it</test>

最佳答案

There are so many posts for this question. I have gone through all of them but I didn't get the solution as I expected.

是的,您认为您要询问的主题已经明确定义,并且已经在本网站上得到了很好的涵盖。然而,这并不能避免犯错误,因为它发生在一天又一天的最佳使用中。

您在代码示例中编写:

This is a xml file which has special characters

然后您提供以下字符串:

<test>This is a xml file which has special characters < > & in it</test>

但是你写的是错误的。这不是 XML 文件,因为它不是 well-formed

所以这是发生的第一个错误。

您在问题中遇到的下一个错误是您对整个字符串应用了转换函数,尽管您只想将其应用于该字符串的一小部分,即这三个字符:

  1. 偏移量 54 处的 <
  2. 偏移量 56 处的 >(从技术上讲,这是 not need to become &gt; )
  3. 偏移量 58 处的 &

因此,您只需要在这些部分上应用该功能。只是一个示例代码来演示这一点,您不应该将其作为“解决方案”,这是为了演示:

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 &lt; &gt; &amp; in it</test>

(还有其他可以想象的方式,例如使用 CData 部分 <test><![CDATA[This is a xml file which has special characters < > & in it]]></test> 但这不是这里的重点。)

然而,尽管存在所有这些错误和由此造成的困惑,但这并不意味着我们在 Stackoverflow 上没有现有的问答 Material 可以清楚地解决该主题。

通过识别所犯的错误来消除混淆,有一个可用的引用资料库,您可以从中选择您选择的武器:

正如您所看到的,有一个更大的问题和答案列表,并且根据第一次分析,您的 XML 有什么问题,它不是 XML,但可能会变成 XML,因为它在视觉上接近它,您应该能够找到您需要的方法可能最喜欢修复它。

我个人是 Tidy extension in PHP 的粉丝,它可以完成您正在寻找的工作:

tidy_repair_string($xml, ['input-xml' => 1, 'output-xml' => 1, 'wrap' => 0]);

您可能想以不同的方式进行操作。请参阅上面的链接问题作为更好的搜索词的开始,并查看其他人就此主题提出和回答的内容。

关于php - 如何使用php转换xml中的特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27721283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com