21 html php xml mysql database
我有一个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>
}
Run Code Online (Sandbox Code Playgroud)
输出是我想要的,即文件输出正确的类别,但仍然给出错误.
错误说:xmlParseEntityRef:没有名字
然后它指向一个&符号的确切字符.
只有在$dbrow['category']
带有&符号的东西时才会抱怨,例如:" 汽车和卡车 ",或" 电脑和电话 ".
有谁知道问题是什么?
顺便说一句:我在所有文档中都将编码设置为UTF-8,以及xml输出.
Nik*_*kiC 45
&
在XML中启动一个实体.由于您尚未定义实体&WhateverIsAfterThat
,因此会引发错误.你应该逃避它&
.
$string = str_replace('&', '&', $string);
Run Code Online (Sandbox Code Playgroud)
要转义其他保留字符:
function xmlEscape($string) {
return str_replace(array('&', '<', '>', '\'', '"'), array('&', '<', '>', ''', '"'), $string);
}
Run Code Online (Sandbox Code Playgroud)
$string =
htmlspecialchars
($string,
ENT_XML1
);
是解决所有编码错误的最通用方法(恕我直言,最好编写自定义函数+没有必要仅仅解决&
)。
图片来源:将 Wrikken 和 joshweir 的评论作为答案,以便更加明显。