Как лучше настроить PHP для обработки веб-сайта UTF-8

Какие расширения вы порекомендуете и как лучше всего настроить php для создания веб-сайта, использующего кодировку utf-8 для всего. например…

  • Вывод страницы – utf-8
  • формы представляют данные, закодированные в utf-8
  • внутренняя обработка строковых данных (например, при разговоре с базой данных) также находится в 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_ каждый раз.