2010-06-25 1 views
1

Я беру XML-файл и читаю его в разные строки перед записью в базу данных, однако у меня возникают трудности с немецкими символами.utf8_encode или decode не делает то, что я ожидаю

Файл XML начинается

<?xml version="1.0" encoding="UTF-8"?> 

Тогда пример того, где я с проблемами эта часть

<name><![CDATA[PONS Großwörterbuch Deutsch als Fremdsprache Android]]></name> 

Мой PHP имеет этот соответствующий раздел

$dom = new DOMDocument(); 
$domNode = $xmlReader->expand(); 
$element = $dom->appendChild($domNode); 
$domString = utf8_encode($dom->saveXML($element)); 
$product = new SimpleXMLElement($domString); 

//read in data 
$arr = $product->attributes(); 
$link_ident = $arr["id"]; 
$link_id = $platform . "" . $link_ident; 
$link_name = $product->name; 

Так $ link_name становится PONS GroÃwörterbuch Deutsch als Fremdsprache Android

я тогда сделал

$link_name = utf8_decode($link_name); 

Который, когда я повторил обратно в терминал работал отлично

PONS GroÃwörterbuch Deutsch als Fremdsprache Android as is now 
PONS Großwörterbuch Deutsch als Fremdsprache Android after utf8decode 

Однако, когда это написано в моей базе данных она выглядит как:

PONS Kompaktwörterbuch Deutsch-Englisch (Android)

Сопоставление для link_name в MysQL - utf8_general_ci

Как я должен делать это, чтобы правильно его записать в мою базу данных?

Это код, который я использую для записи в базу данных

$link_name = utf8_decode($link_name); 
$link_id = mysql_real_escape_string($link_id); 
$link_name = mysql_real_escape_string($link_name); 
$description = mysql_real_escape_string($description); 
$metadesc = mysql_real_escape_string($metadesc); 
$link_created = mysql_real_escape_string($link_created); 
$link_modified = mysql_real_escape_string($link_modified); 
$website = mysql_real_escape_string($website); 
$cost = mysql_real_escape_string($cost); 
$image_name = mysql_real_escape_string($image_name); 
$query = "REPLACE into jos_mt_links 
(link_id, link_name, alias, link_desc, user_id, link_published,link_approved, metadesc, link_created, link_modified, website, price) 
VALUES ('$link_id','$link_name','$link_name','$description','63','1','1','$metadesc','$link_created','$link_modified','$website','$cost')"; 
echo $link_name . " has been inserted "; 

и когда я запускаю его из оболочки я вижу

PONS Kompaktwörterbuch Deutsch-Englisch (Android) has been inserted 

ответ

1

У вас есть строка UTF-8 из XML-файла, и вы помещаете ее в базу данных UTF-8. Таким образом, кодирование или декодирование не требуется, просто вставьте исходную строку в базу данных. Убедитесь, что вы использовали mysql_set_charset('utf-8'), чтобы сообщить базе данных, что есть строки UTF-8.

utf8_decode и utf8_encode ошибочно названы. Они предназначены только для для преобразования кодировок UTF-8 и ISO-8859-1. Вызов utf8_decode, который преобразуется в ISO-8859-1, естественно потеряет любые символы, которые у вас есть, которые не вписываются в эту кодировку. Обычно вы должны избегать этих функций, если не существует определенного места, где вам необходимо использовать 8859-1.

Вы не должны учитывать, что показывает терминал, когда вы эхо-строку должны быть окончательными. У терминала есть свои проблемы с кодированием, и особенно в Windows это, вероятно, будет невозможно выводить каждый символ должным образом. На западной Windows установите системную кодовую страницу (которую терминал будет использовать, чтобы превратить байты PHP, выливающиеся в символы для отображения на экране), будет кодовой страницей 1252, которая аналогична, но не такой, как ISO-8859-1 , Вот почему utf8_decode, который выплескивает ISO-8859-1, появился, чтобы текст выглядел так, как вы ожидали. Но это малопригодно. Внутри вы должны использовать UTF-8 для всех строк.

+0

спасибо bob, поэтому я изменил строку, которая сделала utf8_encode только $ domString = $ dom-> saveXML ($ element); и удалил строку utf8_decode и добавил mysql_Set_charset, и он сработал :) – kitenski

1

Вы должны использовать mb_convert_encoding или Iconv помазание, прежде чем писать в ваш база данных.

+0

Спасибо, но как это поможет, когда у меня есть utf8, и я пишу в поле utf8 в базе данных? – kitenski

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

  • Нет связанных вопросов^_^