Я столкнулся с той же проблемой для UTF-8 characters
, все работало на живом сервере и промежуточном сервере, но иногда оно ломалось на моей машине разработчика. Поведение было таким странным, иногда символы были закодированы правильно, но при случайной перезагрузке страницы оно начинало разрываться с Diamond Charters
'���เห็นอเวิลด์!���'
или Question mark
'??�เห็นอเวิลด์!???'
или 85% данные отображались правильно 'เห็นอเวิลด์!?��'
, но остальные 15% показывали несопоставленные символы. Я искал, чтобы решить проблему. Итак, началось с моего контрольного списка
1 - Проверить, добавлен ли заголовок символа в HTML
2 - Проверить, правильно ли сохранены данные в таблице MySQL
3 - Проверьте, есть ли в MySQL правильные настройки кодировки для UTF-8
4 - Проверить, есть ли в Apache настройки для работы с набором символов UTF-8
5 - Проверить, может ли простой PHP отображать вывод «เห็น อ เวิลด์» так же, как и ввод «เห็น อ เวิลด์»
6 - Проверить, отправляет ли PHP правильные выходные данные заголовков
7 - Проверить, получает ли MySQL Query такие же данные "เห็น อ เวิลด์"
8 - Проверьте, есть ли в «เห็น อ เวิลด์» символы html, разберитесь с ними правильно
9 - Проверить, проходит ли «เห็น อ เวิลด์» через функцию кодирования html-кодирования
10- Проверьте, установлен ли .htaccess для работы с набором символов UTF-8
Проверьте весь приведенный выше список, чтобы выяснить, где что-то ломается.
Попробуйте (я использую Codeigniter):
=================================
:: PHP ini Settings::
=================================
default_charset = "utf-8"
mbstring.internal_encoding=utf-8
mbstring.http_output=UTF-8
mbstring.encoding_translation=On
mbstring.func_overload=6
=================================
:: .htaccess Settings::
=================================
DefaultLanguage en-US
AddDefaultCharset UTF-8
=================================
:: HTML Header Page::
=================================
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
=================================
:: PHP Codeigniter index.php ::
=================================
header('Content-Type: text/html; charset=UTF-8');
=================================
:: Codeigniter config.php ::
=================================
$config['charset'] = 'UTF-8';
=================================
:: Codeigniter database.php ::
=================================
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
=================================
:: Codeigniter helper function (optional)
=================================
if(!function_exists('safe_utf_string')){
function safe_utf_string($utf8string= ''){
$utf8string = htmlspecialchars($utf8string, ENT_QUOTES, 'UTF-8');
return mb_convert_encoding($utf8string, 'UTF-8');
}
}
и, наконец, не забудьте сказать спасибо! :) на @ djn ответить