У меня есть таблица, где я храню некоторые текстовые метки. Первоначально он был построен с использованием параметров сортировки latin_swedish_ci (по умолчанию).
Теперь мне нужно поддерживать дополнительные языки, например русский. У меня есть две страницы, которые используют эти ярлыки. Один показывает их хорошо, несмотря на тот факт, что таблица все еще с латинской сортировкой и НЕ utf8_generic_ci, однако на другой странице все еще отображается мусор. Когда я смотрю на источник, он выглядит так:
\ U00d0 \ u00a4 \ u00d0 \ u00b8 \ u00d0 \ u00bb \ u00d1 \ u0152 \ u00d1 \ u201a \ u00d1 \ u20ac \
Обе страницы имеют:
<META http-equiv="Content-type" content="text/html;charset=UTF-8">
Что мне не хватает?
ОБНОВИТЬ:
Я не знаю почему и как это работает, но в итоге я добавил следующее перед вставкой / обновлением моего запроса и перед рендерингом на странице, и это исправило все мои проблемы:
mysql_query("SET NAMES utf8");
Если вы слишком много времени потратили на попытки создания мета-тегов и заголовков, попробуйте это решение.
Делать не использовать mysql_*
интерфейс; переключиться на mysqli_*
,
Вы, вероятно, хотели что-то вроде Фил...
?
Вероятно, есть два неправильных, чтобы получить этот беспорядок.
meta
тег хорош; SET NAMES utf8
нужно.
Но, вероятно, вы сохранили мусор в таблице. Итак, давайте посмотрим на таблицу: SELECT col, hex(col) FROM tbl...
За Фил
, вы должны увидеть гекс D0A4D0B8D0BB
, Если ты видишь C390C2A4C390C2B8C390C2BB
, у вас есть «двойное кодирование». Вместо этого кажется, что каким-то образом вы получили «unicode» вместо «utf8», и, возможно, из «latin1», с которого вы начали. Обратите внимание, как D0 A4 D0 B8 D0 BB
появляется в моем гексе и в вашем \u00d0...
?
Если вы можете начать все сначала, сделайте так:
SET NAMES utf8
CHARACTER SET utf8
на столбце / таблице<meta charset=UTF-8>
Если вы не можете начать все сначала, давайте посмотрим, что SELECT
Я попросил; может быть Я могу найти способ спасти ваши данные.
Других решений пока нет …