php и mysql конвертируют не в юникод

У меня есть такие персонажи на нашем веб-сайте: FÃny©mnyomƒƒ³

Это адрес улицы, введенный на другом языке (хотя я не знаю, какой именно). Вот настройка БД:

mysql 4.1.2log
charset cp1252 West European (latin1)

Я использую PHP, но без mbstrings() (хотя я не делаю строковые преобразования по этому адресу, просто эхо).

Если я изменил кодировку mysql с cp1252 на UTF-8 и убедился, что использовал такие вещи, как header( 'Content-Type: text/html; charset=UTF-8' ); это улучшит мою ситуацию? Или данные скрыты, потому что они были сохранены в кодировке cp1252, и я ничего не могу сделать? Первоначальная база данных была создана в 2002 году и с тех пор используется / расширяется. Мы обновили серверы и повторно импортировали дампы, но стыдно признаюсь, что не придавал большого значения кодировкам.

Если у меня есть рукава, я, вероятно, просто удалю текст в этих полях, но я бы хотел поддерживать Unicode, поэтому, если я выдам ALTER database_name DEFAULT CHARACTER SET utf8; будет ли это гарантировать, что будущие многобайтовые кодировки будут сохранены правильно, по крайней мере, из хранилища выйдет из уравнения (оставив меня беспокоиться о PHP)?

Спасибо -

1 ответ

Решение

1) Конвертировать все кодировки в UTF8:

ALTER database_name DEFAULT CHARACTER SET utf8;

2) Выполните это перед любым запросом на странице:

mysql_query("set names 'utf8'");

3) Используйте этот заголовок:

header( 'Content-Type: text/html; charset=UTF-8' );

4) Вставьте этот метатег:

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>

5) Кроме того, прочитайте это: http://www.oreillynet.com/onlamp/blog/2006/01/turning_mysql_data_in_latin1_t.html

Другие вопросы по тегам