php и mysql конвертируют не в юникод - PullRequest
2 голосов
/ 22 августа 2010

У меня на сайте есть такие символы: FÃ © mnyom m

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

mysql 4.1.2log
charset cp1252 West European (latin1)

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

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

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

Спасибо -

1 Ответ

1 голос
/ 22 августа 2010

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

...