【发布时间】:2011-12-09 15:39:51
【问题描述】:
我创建了这个 php 脚本,从我的数据库中创建一个 xml 文件:
<?php
header("Content-type: text/xml");
header("Expires: Mon, 26 Jul 1990 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
$host = "localhost";
$user = "root";
$pass = "root";
$database = "flexapp";
$charToReplace = array("é", "è", "ê");
$charReplacements = array("e", "e", "e");
$linkID = mysql_connect($host, $user, $pass) or die("Could not connect to host.");
mysql_select_db($database, $linkID) or die("Could not find database.");
$query = "SELECT * FROM artists";
$artist_result = mysql_query($query, $linkID) or die("Data not found.");
$xml_output = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$xml_output .= "<artists>\n";
for($x = 0 ; $x < mysql_num_rows($artist_result) ; $x++){
$itemrow = mysql_fetch_assoc($artist_result);
$xml_output .= "\t<artist>\n";
$xml_output .= "\t\t<id>" . $itemrow['pk_artist_id'] . "</id>\n";
$itemrow['artist_name'] = str_replace($charToReplace, $charReplacements, $itemrow['artist_name']);
$xml_output .= "\t\t<name>" . $itemrow['artist_name'] . "</name>\n";
$xml_output .= "\t\t<picture>" . $itemrow['artist_pic'] . "</picture>\n";
$xml_output .= "\t\t<twitter>" . $itemrow['artist_twitter'] . "</twitter>\n";
$xml_output .= "\t</artist>\n";
}
$xml_output .= "</artists>\n";
echo $xml_output;
?>
我尝试将 é en ê 之类的字符替换为 e。
但它在浏览器中给出了这个错误:
This page contains the following errors:
error on line 23 at column 9: Encoding error
这是输出的xml:
<?xml version="1.0" encoding="UTF-8"?>
<artists>
<artist>
<id>1155</id>
<name>Have Heart</name>
<picture>http://userserve-ak.last.fm/serve/126/29086375.jpg</picture>
<twitter></twitter>
</artist>
<artist>
<id>1156</id>
<name>Dead Swans</name>
<picture>http://userserve-ak.last.fm/serve/126/4781939.jpg</picture>
<twitter></twitter>
</artist>
<artist>
<id>1157</id>
<name>Nirvana</name>
<picture>http://userserve-ak.last.fm/serve/126/3991355.jpg</picture>
<twitter></twitter>
</artist>
<artist>
<id>1158</id>
<name>Touchter>
</artist>
但最后一个(数据库中的名称是 Touché Amoré)应该和其他所有的一样,但不知何故,字符串没有被替换。
【问题讨论】:
-
不确定它是否正是您想要的,但试试this也许会有所帮助
-
我在做类似的事情时遇到的一件事是 MySQL 连接器 - 默认情况下,即使引擎将字符串存储在 utf-8 中,连接器也会以 iso-8859 将其拉出 - 1 除非您将字符集设置为连接器。见 mysql_set_charset() @php.net/manual/en/function.mysql-set-charset.php 如果你有 utf-8 格式的 XML 文件并且数据库是 utf-8 格式,你不应该需要将 'é' 类型的字符转换为 ' e'
-
试过这个,但没有帮助。
-
已将其扩展为完整答案 - 如果您已对其进行排序,请随意忽略;)