Преобразование кодировки ISO-8859-1 в UTF-8 в PHP - PullRequest
0 голосов
/ 06 января 2010

Мне нужно импортировать данные из базы данных, где используется кодировка символов ISO-8859-1, а новый сайт, который мы используем, использует UTF-8. Сайт, с которого извлекаются данные, устарел, поэтому я полагаю, что причина в том, что он находится в ISO.

Я пробовал следующие решения безрезультатно:

Iconv

Тем не менее, после публикации предлагаемое правило в марте 2008 года, которое будет вообще запретили такие предметы, Почтовая служба получила множество комментарии против его запланированных действий по четырем основным причинам: (1) оригинальный язык был расплывчатым и чрезмерно широкая, поэтому почтовая служба изменил слово «боеприпасы» на «Взрывные устройства» (2) некоторые Респонденты задали вопрос, является ли такой проблема даже существовала, хотя Почтовая служба сообщает, что записала многочисленные инциденты с участием обнаружение почты, которая выставлена характеристики возможного взрывчатка, (3) предлагаемое правило предположительно нарушил Второй Поправка и (4) Почтовая служба не хватает полномочий для запрета рассылки таких предметов.

до

Тем не менее, после публикации предлагаемое правило в марте 2008 года, которое будет вообще запретили такие предметы, Почтовая служба получила множество комментарии против его запланированных действий по четырем основным причинам: (1) оригинальный язык был расплывчатым и чрезмерно широкая, поэтому почтовая служба изменил слово «боеприпасы» к взрывоопасным устройствам, (2) некоторые респонденты задали вопрос такая проблема даже существовала, хотя Почтовая служба говорит, что имеет • записал многочисленные инциденты включая обнаружение почты, которая выставленные характеристики возможного взрывчатка, Ã ¢ Â € (3) предлагаемое правило предположительно нарушил Второй Поправка и (4) Почтовая служба не хватает полномочий для запрета рассылки таких предметов.

mb_convert_encoding

Точно такой же результат, как указано выше.

utf8_encode

Точно такой же результат, как указано выше.

utf8_decode

Откатывает интересный результат со всеми? замены:

Тем не менее, после публикации предлагаемое правило в марте 2008 года, которое будет вообще запретили такие предметы, Почтовая служба получила множество комментарии против его запланированных действий по четырем основным причинам: (1) оригинальный язык был расплывчатым и чрезмерно широкая, поэтому почтовая служба изменил слово «боеприпасы» в взрывные устройства, (2) некоторые Респонденты задали вопрос, является ли такой проблема даже существовала, хотя Почтовая служба говорит, что это? Записано многочисленные инциденты с участием обнаружение почты, которая выставлена характеристики возможного взрывчатые вещества ,? (3) предлагаемое правило предположительно нарушил Второй Поправка и (4) Почтовая служба не хватает полномочий для запрета рассылки таких предметов.


Не совсем уверен, что здесь делать.

Буду признателен за любую помощь!

Спасибо!

Ответы [ 3 ]

1 голос
/ 06 января 2010

Вы должны быть очень внимательны с этим. Между базой данных и веб-браузером существует множество мест, где кодировка может быть испорчена.

  • Кодировка сервера базы данных и кодировка сопоставления
  • Кодировка базы данных и кодировка сопоставления
  • Соединение базы данных и кодировка сопоставления
  • Кодировка каждой таблицы базы данных и кодировка сопоставления
  • В различных функциях PHP (например, htmlentities)
  • Тип содержимого HTTP

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

Чтобы проверить содержимое базы данных (кроме настроек таблицы), выполните этот запрос

select @@character_set_server
     , @@collation_server
     , @@character_set_database
     , @@collation_database
     , @@character_set_client
     , @@character_set_connection
     , @@collation_connection
     , @@character_set_results
;

Проверьте операторы CREATE вашей таблицы на наличие этой информации (вы можете скопировать / вставить их в свой вопрос, если вам нужна помощь)

Чтобы обратиться к HTTP-типу содержимого (т. Е. К выходной кодировке символов), убедитесь, что это есть в вашем PHP где-то перед выводом

ini_set( 'default_charset', 'UTF-8' );

Наконец, если это не поможет, расскажите нам немного подробнее. Какие параметры вы используете с iconv?

0 голосов
/ 07 января 2010

Результат запроса, который вы мне дали, был таким:

латинский1 латинский1_swedish_ci
latin1 latin1_swedish_ci
латинский1 латинский1
latin1_swedish_ci
latin1

Что касается кодировки по умолчанию, установленной в начале файла PHP, она работает для некоторых данных, но не для всех.

В любом случае, все еще изучаю это здесь.

0 голосов
/ 06 января 2010

Это не ISO 8859-1, это кодовая страница Windows 1252:

>>> a=u'“'
>>> print a.encode('cp1252').decode('utf-8')
“
>>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...