стек ламп / пользовательский ввод и кодировка символов - PullRequest
3 голосов
/ 29 августа 2009

Есть ли универсальное решение для решения всех проблем кодировки символов? Кажется, у меня всегда возникают проблемы где-то между вводом пользователя, хранением базы данных и извлечением данных (HTML-формы. Я хочу, чтобы все мои данные и веб-страницы были закодированы как utf-8, но, похоже, я всегда получаю неверный utf- Где-то 8 символов.

Я не очень хорошо понимаю кодировку символов, но с тех пор, как я начал работать с французскими символами, у меня навсегда возникают проблемы. Один из других разработчиков urlendecode все, прежде чем отправить его в базу данных, а затем снова urldecodes все, что заставляет меня содрогаться.

Насколько я понимаю, HTML-форма будет принимать любые символы в зависимости от среды пользователя, и на стороне сервера попытаться преобразовать ее в UTF-8 или что-то предпочтительное?

Любая дополнительная информация будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 29 августа 2009

В моих проектах первый запрос, который отправляется в мою базу данных,

SET NAMES 'utf8';

Просто после установки соединения MySQL.

То же самое для дампов данных. Когда я делаю дамп базы данных в файл .sql, я вставляю в начале вышеуказанный запрос.

Это работает для меня в течение нескольких лет без проблем на многих хостинговых компаниях и выделенных серверах.

1 голос
/ 29 августа 2009

Использование UTF-8 на всем протяжении - это универсальное решение. К сожалению, это приходит вместе с пониманием проблем, возникающих на практике. Если у вас есть конкретная проблема, опубликуйте конкретный вопрос на SO.

Wrt. HTML-формы: нет, это не совсем зависит от среды пользователя. Браузер будет (или должен - чаще всего будет) отправлять данные в той же кодировке, что и страница, на которой появилась форма. Убедитесь, что каждая HTML-страница, которую вы отправляете пользователю, имеет поле charset = в заголовке HTTP Content-type; для хорошей цели также поместите метатег http-эквивалент в сам файл HTML (который помогает в случае, если пользователь кэшировал или сохранил страницу HTML). Поэтому, когда HTML-страница находится в UTF-8, данные, отправляемые браузером, также находятся в UTF-8.

...