如何通过PHP处理XML输出中的水平省略号(三点)字符

如何通过PHP处理XML输出中的水平省略号(三点)字符,php,xml,ellipsis,Php,Xml,Ellipsis,正如问题中提到的,我正在尝试使用PHP生成XML输出(用于iPhone应用程序),PHP正在从MySQL的文本字段读取数据 只要字段中有水平省略号字符。。。XML没有正确生成 我已经尝试了一些方法来逃避它,如下图所示,但似乎没有一种有效 $row['detail'] = str_replace("&", "&", $row['detail']); $row['detail'] = str_replace("…", "…", $row['detail

正如问题中提到的,我正在尝试使用PHP生成XML输出(用于iPhone应用程序),PHP正在从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']); 
$row['detail']=str_replace(“&”、“&;”、$row['detail']);

$row['detail']=str_replace(“…”,“&hellip;”,$row['detail'])// XML只理解少数字符实体,
”&
。任何错误都将导致文档无效。您可以尝试使用将实体添加到DTD

 <!DOCTYPE text [ <!ENTITY hellip "&#x2026;"> ]>

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

它不适用于您的原因可能是省略号字符的编码与正在生成的XML文件的编码不匹配


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

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

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

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

我也会避免将实体声明放在doctype头中,这是不必要的,除非你在文档中反复重复同一个实体,否则不会增加太多

因此,我建议只使用数字实体

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

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

如果您有一个特定的字符需要查找其数字实体代码,那么在web上有很多地方可以找到这些字符的引用。以下是Wikipedia中的一个:


希望这能有所帮助。

当您使用省略号字符时,会发生什么情况?这可能是一个编码问题。与其创建一个变通方法,不如解决这个问题PEKKA++#正确指定编码将比使用实体产生更小、更可读的结果。谢谢!在我的例子中,它是ISO-8859-1编码。I感兴趣的读者可能会去…嗯,在这和@Spundley's ans之间选择正确的ans是很困难的,后者也教会了我一些有用的基础知识。但选择这一点是因为它只关注确切的问题。感谢mate提供了详细而非常有用的答案,学到了一些重要的东西!尽管我的代表性很低,但我不能投赞成票!@Rajat-没问题嗯。你需要15个代表才能投赞成票。我想你现在可能已经做到了,所以你现在应该可以投赞成票了。:)