0

那是我的php代码;

//Encode ANSI
function donustur($str){
    $eski = array('Ç', 'Ş', 'Ğ', 'Ü', 'İ', 'Ö', 'ç', 'ş', 'ğ', 'ü', 'ö', 'ı', ' ','&');
    $yeni = array('c', 's', 'g', 'u', 'i', 'o', 'c', 's', 'g', 'u', 'o', 'i', '-','&');
    return str_replace($eski,$yeni,$str);
}

header('Content-type: text/xml');
echo "<?xml version=\"1.0\" encoding=\"ISO8859-9\" ?>\n";
echo "<urlset xmlns=\"http://www.google.com/schemas/sitemap/0.84\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.google.com/schemas/sitemap/0.84 http://www.google.com/schemas/sitemap/0.84/sitemap.xsd\">";

echo "<url>
  <loc>http://www.sitem.com/</loc>
  <changefreq>daily</changefreq>
</url>";

$d = "\t<changefreq>daily</changefreq>\n";

$kategoriCek = mysql_query("SELECT * FROM kategoriler");
while($kat = mysql_fetch_array($kategoriCek)){
   echo "<url>\n";
   echo "\t<loc>http://www.sitem.com/".$kat['id']."-".donustur(strtolower($kat['kategoriadi']))."-kategori.html</loc>\n";
   echo $d;
   echo "</url>\n";
}

echo "</urlset>\n";

输出;

<loc>http://www.sitem.com/93-??-guvenl?k-kategori.html</loc>

我想要的应该是这样的;

<loc>http://www.sitem.com/93-is-guvenlik-kategori.html</loc>

UTF-8 和 UTF-8 不是 BOM 或encoding="ISO8859-9"encoding="UTF-8"不起作用。

我们怎么解决?

感谢您的关注。干得好..

4

1 回答 1

0

遵循站点地图协议格式的站点地图必须采用 UTF-8 编码:

Sitemap 协议格式由 XML 标签组成。站点地图中的所有数据值都必须是实体转义的。文件本身必须是 UTF-8 编码的。

例如,你在一开始所做的事情:

 <?xml version=\"1.0\" encoding=\"ISO8859-9\" ?>

已经错了,因为 XML 站点地图不支持该编码。正如您在问题中所写的那样,您只是在那里交换了字符串(例如“UTF-8”),但您根本没有丢失有关实际输出编码的任何信息,您很可能只是输出错误的编码字符数据,甚至可能XML。

您可以做两件事来大大改善这一点并减少出现此类错误的机会:

  1. 找出您要输入的字符的编码方式。在将它们传递到输出处理之前将它们转换为 UTF-8。
  2. 使用SimpleXMLXMLWriter之类的库来生成 XML。你不需要自己做这一切。这些库已经负责编码。
于 2013-09-08T16:44:11.547 回答