2012-03-19 3 views
0

Я теряю акцентированные символы.UTF8 -> Latin1 Сложность, PHP

Из PHP Я загружаю xml-файл, который использует UTF8, в то время как мой PHP-скрипт использует Latin1. Я не могу преобразовать UTF8 в Latin1.

Я попытался это:

$meta=mb_convert_encoding($meta,'CP1252','UTF-8'); 

и

$meta=mb_convert_encoding($meta,'UTF-8'); 
$meta=mb_convert_encoding($meta,'CP1252','UTF-8'); 

Но так или иначе акцентированные символы разбиты и превращена в 2-х символов.

Вход:

<title>First book of zoölogy</title> 

Выход:

<title>First book of zoo?logy</title> 

я понял это сам, увидеть мой ответ ниже. Спасибо всем за вашу помощь!

+0

Просьба показать некоторые примеры ввода и вывода, дать более подробную информацию и код. Это слишком расплывчато, чтобы ответить конкретно. – deceze

+0

Я добавил образец ввода и вывода. – Alasdair

+1

В этом примере показан результат первого фрагмента кода? Вы уверены, что текст, который вы вводите в функцию, кодируется там UTF-8? – deceze

ответ

1

Изменение параметров сортировки таблиц сделать utf8_general_ci и перед conections к использованию базы данных:

mysql_set_charset("utf8"); 

Я думаю, что это может решить вашу проблему.

+0

Все установлено на Latin1, потому что это то, что я хочу использовать, а не UTF8. Я уже установил mysql_set_charset в Latin1. Акцентированные символы должны быть в состоянии быть преобразованы из UTF8 в Latin1 в начале, а это значит, что UTF8 не используется, но где-то символы повреждаются. – Alasdair

+3

@Alasdair. Почему вы хотите продолжить использование Latin1, когда utf8 предлагает гораздо больше.? – Ben

+0

Потому что он использует меньше байтов, и мне не нужен UTF8. – Alasdair

0

Возможно, по умолчанию кодировка вашего MySQL-сервера UTF-8. Попробуйте это:
Вставьте следующий запрос после вашего MySQL детали подключения:

mysql_query("SET NAMES latin1"); 
+0

Это не так, по умолчанию используется latin1, и теперь кажется, что эта проблема возникает прежде чем строка войдет в базу данных, так что это проблема PHP, а не проблема MySQL. – Alasdair

1

Это зафиксировал его:

$meta=iconv('UTF-8','CP1252//TRANSLIT',$meta); 

я до того не знал о Iconv, я думал, что только mb_strings для работы с, но iconv работает очень хорошо.

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