Проблема с кодировкой формы и очистителя HTML / MySQL - PullRequest
0 голосов
/ 28 апреля 2010

сводит меня с ума ...

Страница с формой кодируется как Unicode (UTF-8) через:

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

столбец записи в базе данных: text utf8_unicode_ci

копирование текста из документа Word со знаком "в нем", например: “1922.” является insta-fail и заканчивается в базе данных как â��1922.â�� (ввод новых данных в форму, включая " работает нормально .. Это вырезано и вставлено из Слова ...)

PHP за кулисами:

  • значение от POST
  • запускать через настройки очистителя HTML по умолчанию
  • пробегать mysql_real_escape_string
  • вставить запрос в базу данных

Помощь

Ответы [ 2 ]

1 голос
/ 28 апреля 2010

“1922.” и «1922». 2 разные строки.
Кавычки из слова не являются двойными кавычками «! ="

столбец, который вы описываете, - text utf8_unicode_ci. utf8_unicode_ci - это сопоставление, убедитесь, что для charset в этом столбце установлено значение utf8.

Тогда я бы удостоверился, что вы установили правильную кодировку для каждого соединения, используя SET NAMES utf8 COLLATE utf8_unicode_ci...

Если вы сделали это, но он все еще не сохранен должным образом, убедитесь, что на вашем php включена mbstrings и попробуйте работать с mb_ функциями.

Есть много основных причин, которые могут у вас быть, но я думаю, что charset в столбце и SET NAMES ... должны решить эту проблему.

1 голос
/ 28 апреля 2010

Позвоните mysql_set_charset , чтобы сообщить базе данных, что вы собираетесь отправлять ей строки в кодировке UTF-8.

ввод новых данных в форму, в том числе "отлично работает ...

Ну, " - это нормальная ASCII-цитата. и - это не умные кавычки, которые не являются символами ASCII. Происходят ли они из Слова, неважно; все ваши символы не ASCII будут обрабатываться одинаково.

  • значение от POST
  • запускать через настройки очистителя HTML по умолчанию

Это плохая идея. Очиститель HTML следует запускать над строками, которые являются HTML, и вы намерены выводить его как HTML, для относительно редкого случая, когда вам нужно разрешить пользователям отправлять HTML.

Совершенно неправильно запускать весь вводимый текст. Обычно вам следует разрешить любой старый текст, а затем, когда вы выводите этот текст внутри HTML, вы должны вызывать htmlspecialchars() поверх него.

В противном случае вы нарушаете возможность пользователей вводить < и &, как я в этом сообщении, и вы по-прежнему рискуете использовать межсайтовый скриптинг, когда вы выводите обработанные или не полученные данные.

...