3

很高兴通过由 PHP 和 SimpleDOM.php 处理的 Web 表单将内容保存到我的 XML 文件中

我需要保存有英文定价的商品,所以我需要英文英镑符号。但是,当我这样做时,会发生两件事:

  1. 它将保存的价格返回为 £

  2. 如果我在没有任何其他更改的情况下再次保存它,SimpleDom 解析器然后 barfs 并删除 XML 文件中除英文磅符号之外的任何其他内容。

我的 XML 文件的第一行看起来像

<?xml version="1.0" encoding="ISO-8859-1"?>

在 XML 文件中,£ 被保存为

&amp;Acirc;&amp;pound;

据我所知,iso-8859-1 应该有 £ 符号,所以非常困惑为什么这个 Acirc 会进入它......

我在另一个线程上看到有人说尝试使用 8859-15 但这没有任何区别。

有什么想法吗?

Cheers Jas(对所有这些编码内容的完整 nube)

4

2 回答 2

10

的 unicode 代码点£是 U+00A3。在 UTF-8 编码中,它是0xC2 0xA3. 现在,在 ISO-8859-1 中,0xC2 是 Å,0xA3 是 £。因此,在流程中的某个地方,您输入的内容变成了 UTF-8,它被解释为 ISO-8859-1。您是否查看过“表单”在到达您的 PHP 代码之前如何对数据进行编码。

而且,除此之外,这个 SimpleDOM 对实体做了什么? 和&磅; 没有声明就不是有效的 XML 实体。SimpleDOM 是否添加声明?

于 2011-09-08T14:21:47.313 回答
1

42 的响应肯定解决了其中一个问题......我将 encoding=iso-8859-1 放在 xml 文档中,但在 html 元内容类型标记中使用 utf-8。

如果有人遇到此答案,请注意另一件事。我也遇到了来自 Windows 文档的弯曲引用的严重问题(将 Word 2007 中的文本复制到我网站上的 html 表单字段中)。弯引号和撇号之间有很大的区别。在英文键盘上,Word 将上破折号(撇号)解释为单个弯曲引号。ISO-8859-1 没有这样的实体(其编码在 Windows-1252“标准”中)。这正在杀死我的 XML 文档,因为它们是由 PHP 从表单字段中解析的。解决方案很简单:

$var = htmlentities($var,ENT_QUOTES, "Windows-1252");

其他人提到了 htmlentites 和 striptags……但我花了 4 半天时间才把所有这些放在一起。希望能节省一些时间。

于 2011-09-13T15:51:22.447 回答