Значение META charset = UTF-8 предотвращает отображение символов UTF-8 - PullRequest
0 голосов
/ 26 августа 2010

Я создал тестовую программу, которая в основном является текстовой областью, в которую я могу вводить символы, и когда я нажимаю «отправить», символы записываются в тестовую таблицу MySQL (с использованием PHP).

Тестовая таблица - UTF-8.

Скрипт работает нормально, если я хочу записать é или ú в базу данных, которую он пишет нормально. Но тогда, если я добавлю следующее мета-утверждение в область <head> моей страницы:

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

... персонажи начинают карабкаться.

Моя теория состоит в том, что сервер вводит некоторую кодировку, которая работает хорошо, но когда я добавляю директиву UTF-8, она переопределяет эту кодировку сервера, и что эта кодировка UTF- * не включает такие символы, как é и ú. Но я подумал, что UTF-8 закодировал все символы (кроме клингона и т. Д.).

В основном моя программа работает, но я хочу знать, почему, когда я добавляю директиву, она не работает. Я думаю, что что-то упустил.

Любая помощь / обучение наиболее ценится.

Заранее спасибо.

1 Ответ

1 голос
/ 26 августа 2010

Во-первых, PHP обычно не обрабатывает набор символов Unicode или кодировку UTF-8. За исключением (осторожного использования) функций mb _..., он просто обрабатывает строки как двоичные данные.

Во-вторых, вам нужно сообщить клиентской библиотеке MySQL, с каким набором символов / кодировкой вы работаете. Команда SQL «SET NAMES» выполняет свою работу, и различные клиенты MySQL (mysql, mysqli и т. Д.) Предоставляют к ней доступ различными способами, например, http://www.php.net/manual/en/mysqli.set-charset.php

Ваш браузер и клиент MySQL, вероятно, по умолчанию имеют значение latin1 и совпадают по совпадению. Затем MySQL знает, как преобразовать двоичные данные latin1 в UTF-8. Когда вы устанавливаете кодировку / кодировку браузера в UTF-8, клиент MySQL интерпретирует эти данные UTF-8 как latin1 и неправильно транскодирует их.

Таким образом, решение состоит в том, чтобы установить для клиента MySQL кодировку, соответствующую вводу PHP из браузера.

Обратите внимание, что порядок сортировки таблиц не совпадает с набором символов таблиц - порядок сопоставления относится к тому, как строки сравниваются и сортируются. Запутанные вещи, надеюсь, это поможет!

...