str_replace&:转换&它的& PHP中的字符

时间:2009-07-04 01:31:31

标签: php

我在数据库中有一些数据需要在XML文件中表示,但每个请求的数据都不同,因此XML文件是通过PHP生成的。例如,假设这是db:

中的文本

Hello & Goodbye

我已尝试使用以下内容获取上述内容(设置为$example变量)以在生成的XML中显示为Hello & Goodbye

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

$example = htmlspecialchars_decode($example);

$example = html_entity_decode($example);

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

这些行会将其他实体(例如")替换为正确的字符,但不会取代&。知道如何正常工作吗?

3 个答案:

答案 0 :(得分:7)

&安培;是XML中的无效字符,它永远不会被允许。因此,您正在使用的任何XML库都可能正在将其转换为&。这应该是它的方式 - 否则XML将无效。

答案 1 :(得分:2)

您的代码可以解码实体,因此不是问题。

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

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

答案 2 :(得分:0)

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

跟随

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

为我工作,它输出一个utf-8“兼容”字符串。

相关问题