PHP SimpleXML производит некоторую неизвестную кодировку - PullRequest
0 голосов
/ 08 декабря 2011

Когда я выполняю код ниже,

mysql_connect("localhost", "user", "pass") or die("Could not connect: " . mysql_error());
mysql_select_db("database");
mysql_query ("set character_set_results='utf8'");
$result = mysql_query("SELECT xxx");

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
  $str = $row[0];
  echo $str;
}

Я получаю сообщение ниже, если проверю источники (китайские слова, кодировка UTF-8, как показано ниже),

LS23A300BS(23”LED顯示器)/ LS22A300BS(21.5”LED顯示器)

Но когда я добавил код для преобразования результата SQL в файл XML, как показано ниже,

$dom = new domDocument;
$dom->formatOutput = true;

$root = $dom->appendChild($dom->createElement( "items" ));
$sxe = simplexml_import_dom($dom);

mysql_connect("localhost", "user", "pass") or die("Could not connect: " . mysql_error());
mysql_select_db("database");
mysql_query ("set character_set_results='utf8'");
$result = mysql_query("SELECT xxx");

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
  $item = $sxe->addChild("item");
  $str = $row[0];  
  $item->addChild("desc", $str);
}

echo $sxe->asXML();

mysql_free_result($result);

Я получаю сообщение ниже, если проверяю источники (неизвестная кодировка, как показано ниже),

LS23A300BS(23”LED顯示器)/ LS22A300BS(21.5”LED顯示器)

Я хочу спросить,
Какой тип неизвестной кодировки?
Как я могу изменить эту неизвестную кодировку обратно на UTF-8?

Спасибо

1 Ответ

1 голос
/ 08 декабря 2011

Две вещи, чтобы попробовать:

  1. Используйте mysql_query('SET NAMES utf8'); вместо character_set_results. Это устанавливает еще несколько ключевых настроек MySQL на utf8.
  2. Вы не объявляете кодировку вашего DOMDocument. Попробуйте использовать это как конструктор: new DOMDocument('1.0', 'UTF-8')

Это отступление: вам вообще не нужен DOMDocument здесь. Попробуйте $sxe = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?><items/>');

...