首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >与号(&)处出现XML错误

与号(&)处出现XML错误
EN

Stack Overflow用户
提问于 2010-10-27 01:59:58
回答 5查看 45.4K关注 0票数 24

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

我每次都会在有&符号的地方得到一个错误。

下面是一些php:

代码语言:javascript
复制
$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。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-10-27 02:02:01

XML中的&启动一个实体。因为您还没有定义实体&WhateverIsAfterThat,所以会抛出一个错误。你应该用&amp;来避开它。

代码语言:javascript
复制
$string = str_replace('&', '&amp;', $string);

How do I escape ampersands in XML

转义其他保留字符:

代码语言:javascript
复制
function xmlEscape($string) {
    return str_replace(array('&', '<', '>', '\'', '"'), array('&amp;', '&lt;', '&gt;', '&apos;', '&quot;'), $string);
}
票数 50
EN

Stack Overflow用户

发布于 2020-08-30 00:04:32

$string =htmlspecialchars($string,ENT_XML1);

是解决所有编码错误的最通用的方法(我觉得写定制函数更好+只解决&是没有意义的)。

来源:将Wrikken和joshweir的评论作为答案,以使其更明显。

票数 3
EN

Stack Overflow用户

发布于 2010-10-27 02:03:32

您需要将&转换为其实体&amp;,或者将内容包装在CDATA标记中。

如果选择实体路由,则需要将其他字符转换为实体:

代码语言:javascript
复制
>  &gt;
<  &lt;
'  &apos;
"  &quot;

背景:Beware of the ampersand when using XML

维基百科:List of XML character entity references

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4026502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档