You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP生成动态sitemap出现xmlParseEntityRef: no name错误如何解决

问题原因及修复方案

错误根因

xmlParseEntityRef: no name是XML解析的典型报错,触发原因是XML内容中存在未转义的特殊字符(最常见的是&符号,XML中&是实体引用的开头,后面必须跟随合法的实体名称,单独出现就会触发该报错)。结合你的代码可定位到3个具体问题:

  • 字符串替换逻辑错误:问题代码中str_replace('','-',trim($row2['pagename_admit']))第一个参数是空字符串,完全没有起到替换空格的作用,和参考代码的str_replace(' ','-',...)(将空格替换为横杠)逻辑不符
  • 未对输出到XML的内容做转义处理:如果pagename_admit字段中包含&、<、>、'、"等XML保留字符,直接输出会破坏XML结构
  • XML声明错误:当前的XML声明被包裹在注释标签<!-- -->中,属于无效的XML头部

修复方案

按以下步骤修改代码即可解决报错:

  1. 修正XML声明,移除注释包裹,改为标准XML头部
  2. 修正字符串替换的参数,将空字符串改为空格,实现空格转横杠的效果
  3. 对所有输出到XML标签中的动态内容,使用htmlspecialchars()函数转义XML特殊字符

修正后的代码片段

XML声明部分

// 移除注释包裹,改为标准XML头部
echo '<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL;

循环输出部分

while($row2=mysqli_fetch_array($admit_result)){
    // 先处理页面路径,修正空格替换逻辑
    $page_path = 'localhost:8080/mysite/admitcard/'.$row2["id"].'/'.str_replace(' ','-',trim($row2['pagename_admit']));
    echo '<url>' . PHP_EOL;
    // 对输出到XML的内容做转义处理
    echo '<loc>'.htmlspecialchars($page_path).'</loc>' . PHP_EOL;
    echo '<lastmod>'.date('c',time()).'</lastmod>' . PHP_EOL;
    echo '<changefreq>daily</changefreq>' . PHP_EOL;
    echo '</url>' . PHP_EOL;
}

内容的提问来源于stack exchange,提问作者Rishabh Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:57:02