Использую mysql и php.
В моей базе данных у меня есть значение столбца, как показано ниже.
Preaqueça o forno médio (180ºC).
Но когда я получаю его с помощью php, он показывает строку ниже.
Preaqueu00e7a o forno mu00e9dio (180u00baC).
Что-то не так с кодировкой символов. Есть идеи, чтобы это исправить?
У тебя, кажется, есть две проблемы.
ç
это моджибаке для ç
а также º
это моджибаке для º
, Для этого вам необходимо проверить:
виден.)
наговор 00e7
выглядит как «кодовая точка Unicode» для ç
, но неясно, как вы могли это создать.
Давайте начнем делать SELECT col, HEX(col) FROM ...
чтобы увидеть, что было сохранено. Также предоставьте SHOW CREATE TABLE
, (Подробнее в Проверьте данные .)
После исправления проблем с Моджибаке и выполнения HEX начните новый вопрос. (Боюсь, что эта ветка станет слишком грязной, чтобы ее сохранить.)
Я использовал json_encode для отображения результатов запроса select. Это было причиной проблемы.
function my_json_encode($arr)
{
//convmap since 0x80 char codes so it takes all multibyte codes (above ASCII 127). So such characters are being "hidden" from normal json_encoding
array_walk_recursive($arr, function (&$item, $key) { if (is_string($item)) $item = mb_encode_numericentity($item, array (0x80, 0xffff, 0, 0xffff), 'UTF-8'); });
return mb_decode_numericentity(json_encode($arr), array (0x80, 0xffff, 0, 0xffff), 'UTF-8');
}
Использовали эту функцию вместо json_encode по умолчанию. И она отлично работает.