与号 (&) 处的 XML 错误

2022-08-30 16:28:57

我有一个php文件,它基于MySql数据库打印一个xml。

我每次都会在有 &符号的点上收到一个错误。

这是一些php:

$query = mysql_query($sql);

$_xmlrows = '';

while ($row = mysql_fetch_array($query)) {
    $_xmlrows .= xmlrowtemplate($row);
}

function xmlrowtemplate($dbrow){
    return "<AD>
              <CATEGORY>".$dbrow['category']."</CATEGORY>
            </AD>
}

输出是我想要的,即文件输出正确的类别,但仍然给出错误。

错误说: xmlParseEntityRef: 没有名称

然后它指向确切的字符,这是一个&符号。

只有当是带有&的标志时,这才会抱怨,例如:“汽车和卡车”,或“计算机和电话”。$dbrow['category']

有人知道问题是什么吗?

顺便说一句:我在所有文档中都将编码设置为UTF-8,以及xml输出。


答案 1

&在 XML 中启动一个实体。由于您尚未定义实体,因此会引发错误。您应该使用 .&WhateverIsAfterThat&amp;

$string = str_replace('&', '&amp;', $string);

如何在 XML 中转义与号

要转义其他保留字符:

function xmlEscape($string) {
    return str_replace(array('&', '<', '>', '\'', '"'), array('&amp;', '&lt;', '&gt;', '&apos;', '&quot;'), $string);
}

答案 2

$string =ENT_XML1($string,);

是解决所有编码错误的最通用方法(恕我直言,编写自定义函数+没有意义解决只是)。&

图片来源:将Wrikken和joshweir的评论作为答案,以便更加明显。


推荐