Предыдущая проблема - не удалось сохранить неанглийские символы:
Как хранить неанглийские символы?
Это было исправлено с помощью UTF8. Но сегодня поняли, что символы, подобные ☆
, не сохраняются правильно. Они преобразуются в символы типа â¥â˜†
.
Как это можно зафиксировать?
Используется ли UTF8 последовательно во всем спектре (MySQL, PHP, Apache, <meta> s, заголовки..)?
Для меня это получилось из коробки:
$query = "update tbl set col = '☆' where id = 1";
mysql_query($query) or die(mysql_error());
$query = "select col from tbl where id = 1";
$res = mysql_query($query) or die(mysql_error());
print_r(mysql_fetch_row($res));
Отладочный вывод:
Content-type: text/html; charset=utf-8
Array
(
[0] => ☆
)
Мне кажется, что они хранятся правильно, но вы не интерпретируете их правильно, когда вы их читаете. и
☆
будут заканчиваться как многобайтовые символы в кодировке UTF-8. Готов поспорить, если вы посмотрите на это многобайтовое кодирование, вы увидите его так же, как однобайтная кодировка для â¥
и ☆
соответственно.
Изменить: добавление сведений.
Как вы можете видеть в следующей таблице, интерпретация символов UTF-8, как если бы они были закодированы как Windows Latin-1, дает результаты, которые вы видите.
UTF-8 character Hex
e2 99 a5
☆ e2 98 86
Windows Latin-1 Hex
â e2
99
¥ a5
˜ 98
† 86
I☆
видимо, ТАК не имеет проблем с ними. (☆ _ ☆)