Как я могу конвертировать немецкие символы во время чтения XML и записи PHP в mysql? - PullRequest
1 голос
/ 16 июня 2010

Утро,

Я ввожу данные из файла XML в свою базу данных, но у меня есть какие-либо иски с немецкими словами (которые ошибочно содержатся в XML)

Например, слово fürпоявляется в моем XML как für и, таким образом, появляется в моей базе данных таким же образом.

Я знаю, что мог бы сделать простой поиск / замену для этой точной фразы, но мне было интересно, есть ли более разумный способ сделать это какЯ не могу предсказать, появятся ли когда-нибудь другие немецкие слова в XML?

ДОБАВЛЕНИЕ НЕКОТОРЫХ БОЛЬШЕ ДЕТАЛЕЙ

Источник XML говорит:

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

и вмой PHP у меня есть

$ domString = utf8_encode ($ dom-> saveXML ($ element));

Если я загляну в файл XML до того, как начну его читать, он имеет -

 <title> - <![CDATA[ CoPilot Live v8 Europa für Android 8.0.0.644 ]]> </title> 

Спасибо.

Грег

Ответы [ 4 ]

2 голосов
/ 16 июня 2010

Обычно это происходит, когда данные UTF-8 распадаются, например, как ISO-8859-1.В UTF-8 немецкий umlaut ü представлен двумя байтами, в ISO-8859-1 - одним байтом.два байта декодируются один за другим, что приводит к появлению М и А.Ваша задача будет такой:

  • читать байты XML
  • декодировать их, используя UTF-8

Check http://www.utf8 -zeichentabelle.de / для байтовых значений.

Однако в целом идея исправить это довольно плохая.В конечном итоге вы угадываете кодирование, а не говорите о неправильных закодированных / декодированных символах, которые кодируются / декодируются снова ... удачи!

РЕДАКТИРОВАТЬ:

Я использовал juniversalchardet Тем временем, библиотека для угадывания кодировки символов, и, кажется, работает нормально.Может быть, вы попробуете.

1 голос
/ 16 июня 2010

везде используйте одну и ту же кодировку, и таких проблем не будет.и если вам нужно выбрать кодировку: используйте UTF-8!

, если вы не можете ее изменить (почему вообще ...), вы должны использовать utf8_decode , чтобы получить правильные значения.

0 голосов
/ 24 марта 2013

Для некоторых вещей работает utf8_decode.Возможно, вы захотите взглянуть и на его функции: http://www.php.net/manual/en/normalizer.normalize.php#92592

0 голосов
/ 16 июня 2010

Не забывайте, что если вы используете DOMDocument, то независимо от того, в какой кодировке находится ваш скрипт, он все внутренне преобразует в UTF8 .

Также, если вы используете htmlentities, если вы не указали это специально, по умолчанию будет использоваться кодировка ISO-8859-1. Мне понадобилось время, чтобы понять это!

Полезный комментарий здесь , также с точки зрения немецкого языка.

...