Collation и charset - это не одно и то же. Ваше сопоставление должно соответствовать кодировке, поэтому, если ваш набор символов - utf-8, то же самое должно быть и в сопоставлении. Выбор неправильной сортировки не будет искажать ваши данные - просто сделайте сравнение / сортировку строк некорректно.
Тем не менее, есть несколько мест, где вы можете установить настройки кодировки в PHP. Я бы порекомендовал вам использовать utf-8 везде, если это возможно. Места, для которых требуется указание кодировки:
- База данных. Это может быть установлено на уровне базы данных, таблицы и поля и даже на уровне запроса.
- Связь между PHP и базой данных.
- вывод HTTP; Убедитесь, что в HTTP-заголовке
Content-Type
указан utf-8. Вы можете установить значения по умолчанию в PHP и в Apache или использовать функцию PHP header
.
- HTTP ввод. Обычно формы будут отправляться в том же наборе символов, что и страница, на которой они обслуживались, но чтобы убедиться, что вы должны указать свойство
accept-charset
. Также убедитесь, что URL-адреса имеют кодировку utf-8, или избегайте использования не-ascii символов в URL-адресах (и параметрах GET).
utf8_encode
/ функции декодирования немного странно названы. Они специально конвертируют между latin1 (ISO-8859-1) и utf-8. Если все в вашем приложении - utf-8, вам не нужно много их использовать.
В отношении utf-8 и PHP есть как минимум две ошибки. Во-первых, встроенные строковые функции PHP ожидают, что строки будут однобайтовыми. Для многих операций это не имеет значения, но это означает, что вы не можете полагаться на strlen
и другие функции. На этой странице есть хорошие ограничения. Обычно это не большая проблема, но особенно при использовании сторонних библиотек, вы должны знать, что это может взорваться. Одним из вариантов также является использование расширения mb_string, которое может заменить все проблемные функции альтернативами с поддержкой utf-8. Это все еще не 100% пуленепробиваемое решение, но оно будет работать в большинстве случаев.
Другая проблема заключается в том, что в некоторых установках PHP по-прежнему включена настройка magic_quotes
. Эта проблема ортогональна к utf-8, но может привести к некоторому царапанию головы. Выключи это, ради своего же здравомыслия.