编码XML问题

时间:2013-03-20 12:33:35

标签: php xml character-encoding html-entities

我遇到以下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;

但是,代替HEX编码,是否可以使用命名的HTML实体,例如&pound;

5 个答案:

答案 0 :(得分:1)

  

但是,代替HEX编码,是否可以使用命名的HTML实体,例如&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添加更多命名实体。如果您有兴趣,请参阅

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

非常简单 - 只需使用htmlentities()代替htmlspecialchars()

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

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

答案 4 :(得分:0)

是的,它应该是可能的 - 但这取决于。

从“pound”中查看IT view

  • £ - 唱英镑

  • pound - 货币名称

  • &pound; - 实体名称

  • &#163; - 实体代码

现在,让我们从上面写下所有项目而不将其标记为code。结果是什么?

£,英镑,英镑,英镑 - 正如您所见,第3和第4次产生了£ - 但这是HTML。相信我,I don't lie:P

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

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