繁体   English   中英

XML编码问题

[英]Encoding issue with XML

我在数据库中存储以下HTML时遇到问题:

Carer £4.20 per person<br />

并通过DOMDocument输出到XML,如下所示:

$content = htmlspecialchars($page->content);
$xmlDoc = new DOMDocument();
$xmlDoc->formatOutput = true;

//create the root element
$root = $xmlDoc->appendChild(
$xmlDoc->createElement("document"));

$page->appendChild(
$xmlDoc->createElement("content", $content));

导致

Carer &#xA3;4.20 per person&lt;br /&gt;

但是,可以使用指定的HTML实体(例如&pound;代替HEX编码&pound;

但是,可以使用指定的HTML实体(例如&pound;代替HEX编码&pound;

是和否。首先,不是,因为您正在使用XML,并且在XML中没有这样的命名实体&pound; 默认。

是的,因为您可以改为输出HTML;)让我们看一下示例( online-demo ):

$content = htmlspecialchars('Carer £4.20 per person<br />');

$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
$doc->formatOutput = true;


//create the root element
$root = $doc->appendChild(
    $doc->createElement("document")
);

$root->appendChild(
    $doc->createElement("content", $content)
);

echo "Save XML:\n", $doc->saveXML();
echo "\n\nSave HTML:\n", $doc->saveHTML();

并输出:

Save XML:
<?xml version="1.0"?>
<document>
  <content>Carer &#xA3;4.20 per person&lt;br /&gt;</content>
</document>


Save HTML:
<document><content>Carer &pound;4.20 per person&lt;br /&gt;</content></document>

因此请记住:在XML中,命名实体的集合非常有限,在HTML中,还有更多的实体。 您还可以向XML添加更多命名实体。 如果您有兴趣,请参阅

如果您的XML包含非ASCII字符,并且文件未指定编码就被保存为单字节ANSI(或ASCII),则会出现此错误。

尝试删除htmlspecialchars,看看会发生什么?

http://php.net/manual/zh/function.htmlspecialchars.php

非常简单-只需使用htmlentities()而不是htmlspecialchars()

参见http://de2.php.net/manual/en/function.htmlentities.php

但请注意-XML 知道&pound;类的HTML实体&pound; 如果输出XML而不是HTML,则数字引用是唯一的解决方案。

是的,应该有可能-但要视情况而定。

从“ IT观点 ”看英镑

  • £ -英镑

  • pound -货币名称

  • &pound; - 实体名称

  • &#163; -实体代码

现在,让我们从上方编写所有项目,而不将其标记为code 结果如何?

£,£,£,£ -如您所见,第三和第四位产生了£-但这是HTML。 相信我, 我不会说谎 :P

但我强烈建议您使用&#163; XML中

如果您需要更多信息,可以访问:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM