如何修复 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 '<loc>'.BX_DOL_URL_ROOT.strtolower(str_replace(array(" ", "/"), array("-", "_"), utf8_encode($city_rows["city_landing_pages_keyword"]))).'</loc>'.PHP_EOL;
同样,对其余列执行不同字符集的结果。
希望这会有所帮助。干杯。
【讨论】:
我很高兴它成功了,很高兴帮助你:)以上是关于如何修复 PHP XML 站点地图编码错误的主要内容,如果未能解决你的问题,请参考以下文章
带有 MySql 数据库的动态 PHP 网站;如何为此创建站点地图?