2009-07-04 120 views
0

我需要在XML文件中表示一个数据库中的一些数据,但每个请求的数据不同,因此XML文件是通过PHP生成的。例如目的,让我们说这是在DB文本:str_replace &:将&转换为其在PHP中的字符

Hello & Goodbye

我用下面来获得上述(设置为$example变量)现身试图为Hello & Goodbye在生成的XML :

$example = mb_convert_encoding($example, "utf-8", "HTML-ENTITIES");

$example = htmlspecialchars_decode($example);

$example = html_entity_decode($example);

$example = str_replace("&", "&", $example);

这些生产线将取代其他实体,如",到正确的字符,但不能&。任何想法如何让这个工作正常?

回答

6

&是XML中的一个无效字符,它本身永远不会被允许。正因为如此,无论您使用的是什么XML库,都可以在运行中将其转换为&。这是它应该的方式 - 否则XML将无效。

1

您的代码可以解码实体,所以这不是问题。

我猜你的XML输出库是什么重新逃避实体。要理解的是这种正确的行为。虽然引号可以以非转义的形式出现在XML文档中(明显属性值内部除外),但和符号不能单独使用,因为在几乎所有的上下文中,它们都表示实体的开始。

读取代码输出的任何XML解析器都将理解XML中的Hello & Goodbye,以表示字符串值“Hello &再见”。

0
$example = mb_convert_encoding($example, "utf-8", "HTML-ENTITIES"); 

其次通过

$example = htmlspecialchars_decode(utf8_encode($example)); 

工作对我来说,它输出一个 “兼容” UTF-8字符串。