2

用php需要将mysql数据导出到xml。我知道htmlspecialchars(如果是print/echo);后者会这样做。

现在的问题是如何正确显示非英文字符。

MySQL 编码是“UTF-8”。

在 MySQL 中,非英文字符正确显示。

这是我的代码

header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-cache, must-revalidate');
header('Pragma: no-cache');
header('Content-Type: text/xml');

//.... mysql connect, select

$DOM = new DOMDocument('1.0','UTF-8');
$root = $DOM->createElement('корневой');
$DOM->appendChild($root);

while ($row = mysql_fetch_assoc($res)) {
$child11 = $DOM->createElement('вложенный',mb_convert_encoding($row['TransactionPartnerName'], "UTF-8") );
$root->appendChild($child11);
$child_att11 = $DOM->createAttribute('vārds');
$child11->appendChild($child_att11);
$att_text11 = $DOM->createTextNode('Value attribute11');
$child_att11->appendChild($att_text11);
}

echo $DOM->saveXML();

浏览器中的非英文字符$root = $DOM->createElement('корневой');正确显示。

但是这个$child11 = $DOM->createElement('вложенный',mb_convert_encoding($row['TransactionPartnerName'], "UTF-8") );显示?而不是非英文字符(我的意思是这个вложенный显示正确,但不是来自这个$row['TransactionPartnerName']get的非英文字符?)。

之前有$child11 = $DOM->createElement('child11',$row['TransactionPartnerName']);An invalid character was found in text content. Error processing resource过IE。

添加时mb_convert_encoding没有警告,但显示?.

尝试实验并保存。改为$DOM->save("test1.xml");和 test1.xml 看起来像这样

<?xml version="1.0" encoding="UTF-8"?>
<корневой>
<вложенный vārds="Value attribute11">AUTOMOTIVE</вложенный>
<вложенный vārds="Value attribute11">???????</вложенный>
</корневой>

你看???????MySQL 中的 andрусский不是这些?.

任何想法如何正确显示/保存非英文字符?

更新 后根据建议mysql_connect添加

mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_unicode_ci'");

和所有的作品。可以使用 MySQL,但对于我理解的 PDO 必须使用其他代码。无论如何似乎可以理解问题出在哪里。谢谢

4

1 回答 1

1

用于mysql_set_charset('utf8')从数据库中获取 UTF-8 编码的结果。

于 2013-06-29T09:10:34.463 回答