如何修复 PHP XML 站点地图编码错误

Posted

技术标签:

【中文标题】如何修复 PHP XML 站点地图编码错误【英文标题】:how to fix PHP XML sitemap encoding error 【发布时间】:2019-06-10 03:06:09 【问题描述】:

我正在使用 php 创建 XML 站点地图。 XML 值来自数据库,并使用以下代码生成 XML 站点地图。

header("Content-Type: application/xml; charset=utf-8");
echo '<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL;

$query = mysqli_query($connect, "SELECT * FROM `tbl_city_landing_pages` WHERE `city_landing_pages_status` = 1 ORDER BY `city_landing_pages_keyword` ASC");
$total = mysqli_num_rows($query);

echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'.PHP_EOL;

while ($city_rows = mysqli_fetch_array($query)) 
    echo '<url>'.PHP_EOL;
    echo '<loc>'.BX_DOL_URL_ROOT.strtolower(str_replace(array(" ", "/"), array("-", "_"), $city_rows["city_landing_pages_keyword"])).'</loc>'.PHP_EOL;
    echo '<lastmod>'.date('Y-m-d').'</lastmod>'.PHP_EOL;
    echo '<changefreq>daily</changefreq>'.PHP_EOL;
    echo '</url>'.PHP_EOL;


echo '</urlset>'.PHP_EOL;

上面的代码在某些字符上运行良好。

在我的数据库中,某行包含 Bogotá, D.C.。即使字符集是 utf-8,这个字符也没有编码。显示的错误是,

此页面包含以下错误:

第 19 行第 6 列的错误:编码错误

下面是第一个错误之前的页面渲染。

如何显示数据库中的所有文本。

有什么解决办法。我需要显示 mysql DB 中的所有值。

【问题讨论】:

您的数据库连接是否设置为使用 UTF-8?列/表怎么样? @Phil 数据库设置为 UTF-8 这是一个非常笼统的回答。我问了你三个非常不同的事情。如果可以,请显示您设置连接编码的位置,即mysqli_set_charset() 我说的是数据库排序 utf8_general_ci 那么您是否通过mysqli_set_charset() 设置连接编码?您还应该查看UTF-8 all the way through 【参考方案1】:

您似乎遇到了字符编码问题。

试试这个方法,

首先,确定可以产生不同结果的列 字符集。 在添加到XML 节点之前用utf8_encode 包装它们。 在上面的示例中,假设这是列 ($city_rows["city_landing_pages_keyword"]),它带来了不同的字符集。用utf8_encode 包裹它们,然后放入XML。见下文,

echo '&lt;loc&gt;'.BX_DOL_URL_ROOT.strtolower(str_replace(array(" ", "/"), array("-", "_"), utf8_encode($city_rows["city_landing_pages_keyword"]))).'&lt;/loc&gt;'.PHP_EOL;

同样,对其余列执行不同字符集的结果。

希望这会有所帮助。干杯。

【讨论】:

我很高兴它成功了,很高兴帮助你:)

以上是关于如何修复 PHP XML 站点地图编码错误的主要内容,如果未能解决你的问题,请参考以下文章

创建 XML 站点地图出现错误 [重复]

带有 MySql 数据库的动态 PHP 网站;如何为此创建站点地图?

使用 PHP 动态创建站点地图 [重复]

如何手动创建 XML 站点地图? [复制]

WordPress免插件生成完整站点地图(sitemap.xml)的php代码

如何忽略 Laravel 路由中的站点地图 url?