【问题标题】:PHP XML Entity Encoding issuePHP XML实体编码问题
【发布时间】:2012-02-14 15:04:04
【问题描述】:

我花了几个小时研究了这个问题,但无法找到答案。我正在尝试将 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();

【问题讨论】:

  • 只是为了澄清,如果你替换了 '与 &039;它仍然做同样的事情
  • 我责怪它不是 HTML 4.01 的一部分,尽管我不能说为什么这会在这种情况下产生任何影响。

标签: php xml


【解决方案1】:

你需要使用 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 DOM 中是否没有设置来防止它对实体进行解码?对我来说,这听起来像是一个 php 错误,所以我可能会向他们报告
猜你喜欢
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多