[英]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 £4.20 per person<br />
但是,可以使用指定的HTML实体(例如£
代替HEX编码£
?
但是,可以使用指定的HTML实体(例如
£
代替HEX编码£
?
是和否。首先,不是,因为您正在使用XML,并且在XML中没有这样的命名实体£
默认。
是的,因为您可以改为输出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 £4.20 per person<br /></content>
</document>
Save HTML:
<document><content>Carer £4.20 per person<br /></content></document>
因此请记住:在XML中,命名实体的集合非常有限,在HTML中,还有更多的实体。 您还可以向XML添加更多命名实体。 如果您有兴趣,请参阅
如果您的XML包含非ASCII字符,并且文件未指定编码就被保存为单字节ANSI(或ASCII),则会出现此错误。
尝试删除htmlspecialchars,看看会发生什么?
非常简单-只需使用htmlentities()
而不是htmlspecialchars()
。
参见http://de2.php.net/manual/en/function.htmlentities.php
但请注意-XML 不知道£
类的HTML实体£
! 如果输出XML而不是HTML,则数字引用是唯一的解决方案。
£
-英镑
pound
-货币名称
£
- 实体名称
£
-实体代码
现在,让我们从上方编写所有项目,而不将其标记为code
。 结果如何?
£,£,£,£ -如您所见,第三和第四位产生了£-但这是HTML。 相信我, 我不会说谎 :P
但我强烈建议您使用£
在XML中 !
如果您需要更多信息,可以访问:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.