我有一个基于MySql数据库打印xml的php文件。
我每次都会在有&符号的地方得到一个错误。
下面是一些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: no name
然后它指向确切的字符,这是一个&符号。
只有当$dbrow['category']
中有&标志时才会抱怨,例如:"cars & trucks“或"computers & telephones”。
有人知道问题出在哪里吗?
顺便说一下:我在所有文档以及xml输出中都将编码设置为UTF-8。
发布于 2010-10-27 02:02:01
XML中的&
启动一个实体。因为您还没有定义实体&WhateverIsAfterThat
,所以会抛出一个错误。你应该用&
来避开它。
$string = str_replace('&', '&', $string);
How do I escape ampersands in XML
转义其他保留字符:
function xmlEscape($string) {
return str_replace(array('&', '<', '>', '\'', '"'), array('&', '<', '>', ''', '"'), $string);
}
发布于 2020-08-30 00:04:32
$string =
htmlspecialchars
($string,
ENT_XML1
);
是解决所有编码错误的最通用的方法(我觉得写定制函数更好+只解决&
是没有意义的)。
来源:将Wrikken和joshweir的评论作为答案,以使其更明显。
发布于 2010-10-27 02:03:32
您需要将&
转换为其实体&
,或者将内容包装在CDATA标记中。
如果选择实体路由,则需要将其他字符转换为实体:
> >
< <
' '
" "
https://stackoverflow.com/questions/4026502
复制相似问题