【问题标题】:Ampersand displayed as '&' in XML document&符号在 XML 文档中显示为“&”
【发布时间】:2019-06-04 08:35:56
【问题描述】:

我在使用 PHP 5.6 显示 XML 文档中的 & 字符时遇到问题(现在不能使用 PHP 7.x)

我尝试使用 str_replace()、preg_replace 和其他一些函数: Unable to Parse ampersand in PHP string

这里:PHP not have a function for XML-safe entity decode? Not have some xml_entity_decode?

我还注意到 & 字符是 PHP 5.2.x (https://bugs.php.net/bug.php?id=39521) 中的一个问题,尽管我认为这已得到解决。

这里有一些我尝试做的例子:

$string = "SOMETHING & OTHER THINGS";
$string = str_replace('&', '&' $string);
$element = $domDocument->createElement('myElement', $string);
$rootElement->appendChild($element);

当我发现我尝试过的错误时:

$string = "SOMETHING & OTHER THINGS";
$string = str_replace('&', '&' $string);
$element = $domDocument->createElement('myElement');
$element->appendChild( $domDocument->createTextNode($string) );
$rootElement->appendChild($element);

我的预期是:

<myElement>SOMETHING & OTHER THINGS</myElement>

我得到了什么:

<myElement>SOMETHING &amp; OTHER THINGS</myElement>

或者有时:

<myElement/>

编辑:也许我应该补充一点,我的软件必须下载文件。因此,当我使用 Notepad++ 打开 xml 文件时,我得到了上面显示的结果。

无法真正解决这个问题,感谢任何帮助。 谢谢。

【问题讨论】:

  • 这个编码有什么问题?
  • 这是在 XML 中编码 &amp; 的正确方法。 DOMDocument 会自动为你做,你不需要做任何特别的事情。当您解析文档时,它将被转换回&amp;
  • 问题是我需要显示 SOMETHING & OTHER THINGS 不是这个:SOMETHING &其他事情
  • @ChrisFederico:这不是格式良好的 XML。
  • 你能再精确一点吗?

标签: php xml entities ampersand


【解决方案1】:

好的,所以问题是我实际上用 Notepad++ 打开了 XML 文件,它显示了“&”实体而不是 & 字符;在 XML 解析器中打开文件在某种意义上“解决了”我的问题。

感谢 Barmar (https://stackoverflow.com/users/1491895/barmar) 让我注意到这一点以及所有发表评论的人。

【讨论】:

    【解决方案2】:
    1. &amp;amp; 必须编码为 &amp;amp; 才能使 XML 有效。
    2. XML 解析器会将&amp;amp; 解码为&amp;amp;

    &amp;amp; 在 XML 字符串中具有特殊含义,就像 &lt;。它用于实体引用。这可以是 Unicode 代码点或命名实体,具体取决于实际的 XML 格式。一个例子是 (X)HTML 中的 &amp;nbsp;。这就是为什么&amp;amp; 必须在 XML 文档的大部分部分中进行编码的原因。 DOM 扩展的 XML 序列化器会为您完成,XML 解析器会解码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      • 2023-03-26
      相关资源
      最近更新 更多