Как лучше настроить PHP для обработки веб-сайта UTF-8
Какие расширения вы порекомендуете и как лучше всего настроить php для создания веб-сайта, использующего кодировку utf-8 для всего. например,...
- Вывод страницы - utf-8
- формы представляют данные, закодированные в utf-8
- внутренняя обработка строковых данных (например, при разговоре с базой данных) также находится в utf-8.
Кажется, что php на данный момент не справляется с многобайтовыми наборами символов. До сих пор я выяснил, что mbstring выглядит как важное расширение.
Стоит ли хлопот..?
Ответы
Ответ 1
Предполагаемые проблемы 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">
Ответ 2
Я столкнулся с той же проблемой для 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 запросы одинаковые данные "เห็น อ เวิลด์"
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 ответ
Ответ 3
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, чтобы прочитать тайских кастраторов из электронной таблицы. Я был в конечном счете успешным, но я все еще не уверен, что я сделал правильно.
Ответ 4
Если mbstring еще не является частью вашего пакета PHP, я бы определенно рекомендовал его вам - вы даже захотите использовать его для length строк (mb_strlen ($ string_var, 'utf8')) для ввода формы...
Иначе вам не понадобится ничего, кроме правильного и правильного HTML, правильного http-server-config (поэтому сервер будет доставлять страницы без utf-8) и текстовый редактор с поддержкой utf-8 (например, Notepad ++).
Ответ 5
В php.ini установите
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
так что вам не нужно передавать параметр кодирования в функции mb_ каждый раз.