sitemap.xml土耳其字符

时间:2013-09-08 14:15:48

标签: php xml

这是我的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或编码=“ISO8859-9” encoding =“UTF-8”无效。

我们如何解决?

感谢您的关注。 好作品..

1 个答案:

答案 0 :(得分:0)

Sitemap protocol格式后的站点地图必须采用UTF-8编码:

  

Sitemap协议格式由XML标记组成。站点地图中的所有数据值都必须为entity-escaped。文件本身必须是UTF-8编码。

例如,你在一开始就做了什么:

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

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

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

  1. 找出您输入的字符的编码方式。在将它们传递给输出处理之前将它们转换为UTF-8。
  2. 使用SimpleXMLXMLWriter等库生成XML。你不需要自己做那些。这些库已经处理了编码。