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