Какие расширения вы порекомендуете и как лучше всего настроить php для создания веб-сайта, использующего кодировку utf-8 для всего. например…
Похоже, что php на данный момент не справляется с многобайтовыми наборами символов. До сих пор я разработал, что mbstring выглядит как важное расширение.
Стоит ли хлопот ..?
Предполагаемые проблемы PHP с содержимым Unicode несколько завышены. Я делаю многоязычные сайты с 1998 года и никогда не знал, что может возникнуть проблема, пока я не прочитал об этом где-нибудь – много лет и веб-сайтах позже.
Это прекрасно работает для меня:
Конфигурация Apache (в httpd.conf или .htaccess)
AddDefaultCharset utf-8
PHP (в php.ini)
default_charset = "utf-8" mbstring.internal_encoding=utf-8 mbstring.http_output=UTF-8 mbstring.encoding_translation=On mbstring.func_overload=6
MySQL
CREATE
свою базу данных с помощью сортировки utf8_*
, пусть таблицы наследуют сортировку базы данных и запускают каждое соединение с помощью "SET NAMES utf8"
HTML (в элементе HEAD)
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Я столкнулся с той же проблемой для UTF-8 characters
, все работало на реальном сервере и промежуточном сервере, но когда-то это ломалось на моей машине dev. Поведение было настолько странным, что некоторые символы были закодированы должным образом, но на случайной перезагрузке страницы он начинал ломаться с помощью 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 ответ
php справляется просто отлично!
Вы должны установить параметр php.ini «default_charset» в «utf-8».
Убедитесь, что: –
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
находится в верхней части каждой страницы, которую вы обслуживаете.
Есть несколько проблемных областей:
Базы данных – убедитесь, что они настроены на использование utf-8 по умолчанию или введите мир боли.
IDE / Редакторы – многие редакторы не поддерживают utf-8. Обычно я использую vim, который не является, но его никогда не было большой проблемой.
Документы – просто потратили целый день на то, чтобы получить php, чтобы прочитать тайских карахтеров из электронной таблицы. В конечном итоге я был успешным, но до сих пор не уверен, что я сделал правильно.
Если mbstring еще не является частью вашего пакета PHP, то я определенно рекомендовал бы его вам – вы даже захотите использовать его для длины строк для вычислений (mb_strlen ($ string_var, 'utf8')) для ввода формы … Иначе вам ничего не понадобится, кроме правильного и правильного HTML, правильного http-server-config (поэтому сервер будет доставлять страницы без utf-8) и текстовый редактор с поддержкой utf-8 (например, Notepad ++).
В вашем php.ini установите
mbstring.internal_encoding = UTF-8 mbstring.encoding_translation = On
так что вам не нужно передавать параметр кодирования в функции mb_ каждый раз.