0

我遇到了以下 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 实体来代替 HEX 编码,例如&pound;

4

5 回答 5

1

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

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

是的,因为您可以改为输出 HTML ;) 让我们看看示例(在线演示):

$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 添加更多命名实体。如果你有兴趣,请看

于 2013-03-20T15:31:41.287 回答
0

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

于 2013-03-20T12:36:03.960 回答
0

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

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

于 2013-03-20T12:36:51.730 回答
0

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

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

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

于 2013-03-20T12:37:27.083 回答
0

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

从“ IT 视角”看英镑​​。

  • £- 唱英镑

  • pound- 货币名称

  • &pound;- 实体名称

  • &#163;- 实体代码

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

£, £, £, £ - 如您所见,第 3 和第 4 的结果为 £ - 但这是 HTML。相信我,我不会说谎:P

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

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

于 2013-03-20T12:38:28.860 回答