3

如问题中所述,我正在尝试使用 PHP 从 MySQL 的文本字段中读取数据来生成 XML 输出(用于 iPhone 应用程序)。

每当字段中有水平省略号字符时... XML 生成不正确。

我已经尝试了几种方法来逃避它,如下所示,但似乎没有一种工作......

$row['detail'] = str_replace("&", "&", $row['detail']); 
$row['detail'] = str_replace("…", "&hellip;", $row['detail']); //<-- prob is here
$row['detail'] = str_replace("<", "&lt", $row['detail']); 
$row['detail'] = str_replace("\'", "&apos;", $row['detail']); 
$row['detail'] = str_replace(">", "&gt;", $row['detail']); 
$row['detail'] = str_replace("\"", "&quot;", $row['detail']); 

我基本上有2个问题,

  1. 如何处理水平省略号字符?

  2. 是否还有更多可能导致此类问题的字符?对此列表及其解决方案的任何引用都会很棒!

谢谢

4

3 回答 3

8

在 XML 输出中使用文字、实际字符是可能的(也是推荐的方式)。不要使用基于 HTML 实体的解决方法 - 这是不必要的。

它对您不起作用的原因可能是因为省略号字符的编码与正在生成的 XML 文件的编码不匹配。

你只需要确保它们匹配。例如,如果您正在生成一个 UTF-8 XML 文件,省略号字符也需要是 UTF-8。

于 2011-06-30T14:49:50.990 回答
4

原始 XML 不知道除和&gt;之外的任何命名实体。所有其他实体都需要声明为数字字符代码,否则您需要在 Doctype 或 DTD 中指定实体。&lt;`&amp;

实体在&hellip;HTML DTD 中定义,所有浏览器都能理解,但在大多数其他 XML DTD 中没有定义。

通常,如果您使用的是 DTD,大多数情况下它将是您无法控制的第三方 DTD,因此您无法向它们添加实体。您也不想将实体添加到您自己的 DTD 中。

我也会避免将实体声明放入 doctype 标头中。除非您在文档中一遍又一遍地重复相同的实体,否则它不会真正增加太多不必要的绒毛。

因此,我的建议是简单地使用数字实体。

因此&hellip;,您将使用字符代码实体&#x2026;&#8230;. 这同样适用于任何其他非 ascii 字符。

当然,另一种选择是使用 UTF-8 或 UTF-16 字符编码输出 XML,这完全不需要任何实体。这可能是也可能不是您的选择,但如果可能,这可能是最好的选择。

如果您有一个特定的字符需要查找其数字实体代码,那么网络上有很多地方可以找到它们的参考。这是来自维基百科的:http ://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

希望有帮助。

于 2011-06-30T16:07:19.523 回答
0

XML 只理解少数字符实体,'"&<>. 任何事情都会导致文档无效。您可以尝试将实体添加到 DTD

 <!DOCTYPE text [ <!ENTITY hellip "&#x2026;"> ]>
于 2011-06-30T14:33:46.553 回答