【问题标题】:how to handle horizontal ellipsis (three dots) character in XML output through PHP如何通过PHP处理XML输出中的水平省略号(三个点)字符
【发布时间】:2011-09-26 01:02:16
【问题描述】:

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

只要字段中有水平省略号字符... 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. 还有更多这样的字符会导致这样的问题吗?对此列表及其解决方案的任何引用都会很棒!

谢谢

【问题讨论】:

  • 当您使用省略号字符时究竟会发生什么?这很可能是编码问题。解决这个问题比创建解决方法要好得多
  • Pekka++ # 正确指定您的编码将产生比使用实体更小、更易读的结果。

标签: php xml ellipsis


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!就我而言,它是 ISO-8859-1 编码。有兴趣的读者可以去XML Encoding...嗯,很难在这个和@Spundley 的答案之间选择正确的答案,这也教会了我一些有用的基础知识。但之所以选择这个,是因为它只关注确切的问题。
【解决方案2】:

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

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

一般来说,如果您使用的是 DTD,大多数情况下它将是您无法控制的第三方 DTD,因此您无法向其中添加实体。您也不希望将实体添加到您自己的 DTD 中。

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

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

因此,您可以使用字符代码实体&amp;#x2026;&amp;#8230;,而不是&amp;hellip;。这同样适用于任何其他非 ascii 字符。

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

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

希望对您有所帮助。

【讨论】:

  • 感谢 mate 提供的详细而有用的答案,学到了一些重要的东西!由于我的低代表,我无法投票!
  • @Rajat - 没问题。您需要 15 个代表才能投票。我想你现在可能已经做到了,所以你现在应该可以投票了。 :)
【解决方案3】:

XML 只理解少数字符实体'"&amp;&lt;&gt;。任何事情都会导致文档无效。您可以尝试使用

将实体添加到 DTD
 <!DOCTYPE text [ <!ENTITY hellip "&#x2026;"> ]>

【讨论】:

    猜你喜欢
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2012-12-31
    • 2012-10-11
    相关资源
    最近更新 更多