代码之家  ›  专栏  ›  技术社区  ›  Jithin Varghese

如何修复php-xml站点地图编码错误

  •  1
  • Jithin Varghese  · 技术社区  · 6 年前

    正在使用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;
    

    上面的代码与一些字符一起工作正常。

    在我的数据库中,某些行包含 D.C.博哥大 . 这个字符不编码,即使字符集是UTF-8。显示的错误是,

    此页包含以下错误:

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

    下面是第一个错误之前的页面呈现。

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

    有什么解决办法吗?我需要显示MySQL数据库中的所有值。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Anjana Silva    6 年前

    看起来您有字符编码问题。

    尝试这种方法,

    • 首先,确定可以产生不同结果的列 字符集。
    • 把它们包起来 utf8_encode 在添加到 XML 节点。
    • 在上面的示例中,假设这是列( $city_rows["city_landing_pages_keyword"] ,这会带来不同的字符集。把它们包起来 UTF8L编码 在放入之前 XML . 见下文,

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

    同样,对可以使用不同字符集产生结果的其余列执行此操作。

    希望这有帮助。干杯。