Мне нужно создать приложение на PHP, которое может обрабатывать все символы Unicode во всех местах – редактировать поля, статический HTML, базу данных. Может ли кто-нибудь рассказать мне полный список всех параметров / функций, которые необходимо установить / использовать для достижения этой цели?
апаш
Кодировка сервера должна быть либо не установлена, либо установлена в UTF-8. Это делается с помощью директивы apache AddDefaultCharset. Это может перейти на виртуальный хост или общий файл (см. Документацию).
AddDefaultCharset utf-8
MySql
SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'
PHP
1- Вы должны установить HTML-кодировку страницы UTF-8, через метатег на странице или через заголовок PHP:
<meta http-equiv = "Content-Type" content = "text / html; charset = utf-8" /> -или- header ('Content-type: text / html; charset = utf-8');
2- Вы всегда должны использовать версию функций, связанных с строкой mb *, например, mbstrlen вместо strlen, чтобы получить длину строки строки.
Это должно позволить вам иметь UTF-8 всюду, со страниц на данные. Тест, который вы можете выполнить: щелкните правой кнопкой мыши в любом месте страницы с помощью firefox и выберите «Показать информацию о странице». Эффективная кодировка указана на этой странице.
Важно: вы также должны убедиться, что используете UTF-8 в качестве кодировки соединений при подключении к Mysql из PHP!
Для mysqli это делается
mysqli_set_charset($dblink, 'utf-8')
Некоторые вещи вам нужно будет изучить: –
PHP
Убедитесь, что ваш контент отмечен как utf-8:
default_charset = "utf-8"
Установите mbstring. Вы можете найти его здесь
Убедитесь, что вы используете utf-8 между PHP и MySQL.
Вызвать mysql_set_charset("utf8");
(или использовать SQL-запрос SET NAMES utf8
)
апаш
Вы также устанавливаете Content-Type:
ваших страниц здесь с чем-то вроде этого
AddDefaultCharset utf-8
MySQL
Убедитесь, что все ваши таблицы используют utf8 Collation utf8_general_ci; например
ALTER DATABASE mydb CHARACTER SET utf8;
в заключение
Наконец, тестовые материалы с интересными примерами unicode, такими как эти
Более полезная информация, когда я пробовал это …
Вам рекомендуется использовать либо HTTP-заголовок, либо мета-элемент, чтобы установить кодировку на ваших страницах в utf-8. W3C рекомендует вам обоим. И мета-элемент должен появиться как можно раньше на странице. (Все символы перед мета-элементом должны быть ASCII, которые в основном идентичны почти во всех кодировках символов. Некоторые браузеры будут перезапускать рендеринг страниц, когда они сталкиваются с метатегом, что является еще одной хорошей причиной для его раннего).
Кроме того, на всех формах, принимающих пользовательский ввод, следует установить атрибут accept-charset="utf-8"
. Как правило, браузеры, отправляющие данные POST, по умолчанию будут кодировать страницу, но это не вредно.
Я использовал упомянутые методы, и они отлично работали. До недавнего времени, когда мой провайдер обновил PHP до 5.2.11 и MySQL до 5.0.81-сообщества. После этого изменения символы Юникода были правильно извлечены из базы данных, но все обновления были повреждены, а символы Юникода заменялись символом «?».
Решение заключалось в использовании:
mysql_set_charset('utf8',$conn);
Это было необходимо, хотя мы использовали:
SET NAMES utf8 SET CHARACTER SET utf8
Кроме того, поскольку мы использовали ADOdb, нам нужно было найти ручку подключения PHP. Мы использовали следующее утверждение:
mysql_set_charset('utf8',$adoConn->_connectionID);