Подтвердить что ты не робот

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

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

  • Вывод страницы - utf-8
  • формы представляют данные, закодированные в utf-8
  • внутренняя обработка строковых данных (например, при разговоре с базой данных) также находится в utf-8.

Кажется, что php на данный момент не справляется с многобайтовыми наборами символов. До сих пор я выяснил, что mbstring выглядит как важное расширение.

Стоит ли хлопот..?

4b9b3361

Ответ 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_ каждый раз.