我在数据库中有一些数据需要在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);
这些行会将其他实体(例如"
)替换为正确的字符,但不会取代&
。知道如何正常工作吗?
答案 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“兼容”字符串。