PHP XML 实体编码问题

标签 php xml

经过几个小时的研究,我无法找到答案。我正在尝试将 XML 字符串发送给第三方,因此我需要对一些字符进行编码,在本例中是单引号,也许还有双引号。我使用 PHP XML Dom 来实现此目的,但 saveXML() 函数似乎总是对引号进行取消编码。下面是一个非常简单的示例,当您查看输出时,’已被替换为 ' 但其他人仍然有他们的代码。谁能解释一下为什么会这样以及我如何解决它(不进行 str_replace)。谢谢。

$XMLDoc = new DOMDocument('1.0', 'utf-8');
$comments = $XMLDoc->createElement('Comments');
    $text = $XMLDoc->createElement('Text', "An apostrophe here < ' > Pound sign: £");
$comments->appendChild($text);
$XMLDoc->appendChild($comments);
echo $XMLDoc->saveXML();

最佳答案

您需要使用 createEntityReference 函数使其不受干扰地通过。

示例:

$XMLDoc = new DOMDocument('1.0', 'utf-8');
$comments = $XMLDoc->createElement('Comments');

$text1 = $XMLDoc->createTextNode('An apostrophe here < ');
$text2 = $XMLDoc->createEntityReference('apos');
$text3 = $XMLDoc->createTextNode(' > Pound sign: ');
$text4 = $XMLDoc->createEntityReference('pound');

$comments->appendChild($text1);
$comments->appendChild($text2);
$comments->appendChild($text3);
$comments->appendChild($text4);
$XMLDoc->appendChild($comments);
echo $XMLDoc->saveXML();

请注意,某些项目默认由 createTextNode 编码。 < 和 > 已编码,井号未编码。 希望这有帮助!

关于PHP XML 实体编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9279195/

相关文章:

php - 如何在 cassandra 中搜索 map 数据类型列?

javascript - 在 PHP Echo 中调用 Javascript 函数

php - 查询正确执行,但性能不佳

c# - 根节点有属性时如何选择xml根节点?

php - 如何替换链接子项以创建适合播客的提要?

php - laravel中如何从同一数据库下的另一个表中获取值?

PHP 表单转 MySQL - Array[] 转入 MySQL 问题

xml - 在XSLT中,我可以使用当前节点属性作为动态值来应用模板吗?

xml - 是否可以在 Jenkins 测试作业中下载原始 xml 文件

xml - sed 查找并替换 xml 文件中的值