2013-02-13 3 views
3

У меня есть код, который создает XML, моя единственная проблема заключается в кодировании таких слов, как á, olá и ção.
Эти символы не отображаются правильно, и когда я пытаюсь прочитать XML, я получаю сообщение об ошибке, имеющее отношение к этому символу.Проблема кодирования символов XML с PHP

$dom_doc = new DOMDocument("1.0", "utf-8"); 
$dom_doc->preserveWhiteSpace = false; 
$dom_doc->formatOutput = true; 
$element = $dom->createElement("hotels"); 

while ($row = mysql_fetch_assoc($result)) { 

$contact = $dom_doc->createElement("m" . $row['id']); 

$nome = $dom_doc->createElement("nome", $row['nome']); 

$data1 = $dom_doc->createElement("data1", $row['data']); 
$data2 = $dom_doc->createElement("data2", $row['data2']); 


$contact->appendChild($nome); 
$contact->appendChild($data1); 
$contact->appendChild($data2); 

$element->appendChild($contact); 
$dom_doc->appendChild($element); 

Что я могу изменить, чтобы исправить свою проблему, я использую utf-8 ???

+0

Можете ли вы показать, что вы получаете ошибки х, и/или как выглядят символы, когда вы открываете xml в редакторе? – flup

+0

Я получаю ошибки синтаксического разбора, а затем странные символы на их месте – 2013-02-13 14:16:43

+0

Было бы неплохо увидеть настоящие странные символы и ошибки – flup

ответ

0

Вы используете формат кодирования unicode utf-8. Несмотря на то, что он правильно поддерживает все 1,112,064 кода в Unicode, возможно, что здесь есть проблема.
Попробуйте UTF-16 как стандарт, просто идея. Смотрите ниже:

$dom_doc = new DOMDocument("1.0", "utf-16"); 

ИЛИ

$dom_doc = new DOMDocument("1.0", "ISO-10646"); 
+0

спасибо, попробуйте это – 2013-02-13 14:09:14

+0

как-то, что на самом деле работал..хорошая идея. спасибо – 2013-02-13 14:17:15

+1

Если работа UTF-16 работала, то ваша БД могла бы быть заполнена данными, поступающими из системы Windows. Я слышал, что они используют UTF-16 по умолчанию ... – ofaurax

1

Пожалуйста, попробуйте сразу положить 'а', 'ОЛА' или '' СаО в сценарии.

$data1 = $dom_doc->createElement("data1", 'ção'); 

Если вы не имеете проблему, то это, вероятно, данные, которые вы получаете от MySQL, которые неправильно закодирован. Вы уверены, что ваш mysql выдает правильные UTF-8?

Чтобы узнать это, сделайте свой PHP дампом ваши данные в документе HTML с метатегом, установленным в UTF-8, и проверьте правильность отображения символов.

Вы также можете позвонить:

$data1 = $dom_doc->createElement("data1", mb_detect_encoding($row['data'])); 

и посмотреть, что кодировка определяется с помощью PHP для ваших данных.

Если вы не можете преобразовать данные из базы данных, или изменить его настройки, вы можете использовать mb_convert делать это на лету: http://www.php.net/manual/en/function.mb-convert-encoding.php

Смежные вопросы