我遇到以下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 />
但是,代替HEX编码,是否可以使用命名的HTML实体,例如£
?
答案 0 :(得分:1)
但是,代替HEX编码,是否可以使用命名的HTML实体,例如
£
?
是和否。首先,不是因为您使用的是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添加更多命名实体。如果您有兴趣,请参阅
答案 1 :(得分:0)
如果您的XML包含非ASCII字符,并且文件保存为单字节ANSI(或ASCII)且未指定编码,则会出现此错误。
答案 2 :(得分:0)
尝试删除htmlspecialchars,看看会发生什么?
答案 3 :(得分:0)
非常简单 - 只需使用htmlentities()
代替htmlspecialchars()
。
请参阅http://de2.php.net/manual/en/function.htmlentities.php
但要注意 - XML 不知道像£
这样的HTML实体!
如果输出XML而不是HTML,则数字引用是唯一的解决方案。
答案 4 :(得分:0)
£
- 唱英镑
pound
- 货币名称
£
- 实体名称
£
- 实体代码
现在,让我们从上面写下所有项目而不将其标记为code
。结果是什么?
£,英镑,英镑,英镑 - 正如您所见,第3和第4次产生了£ - 但这是HTML。相信我,I don't lie:P
但我强烈建议您使用 XML 中的£
!
如果您想要更多信息,可以访问: