mysql_real_escape_string не может экранировать специальные символы, поскольку текст поступает из текстового редактора - PullRequest
1 голос
/ 10 января 2012

Я создаю страницу, на которой пользователь вводит комнеты и комментарии вставляются в БД (mysql). Эти комментарии могут содержать одинарные, двойные кавычки или любые специальные символы. Чтобы избежать этого, я использовал следующий код

 $str = mysql_real_escape_string($str,$conn);

здесь $ conn - активный ресурс соединения, $ str - строковое содержимое из textarea

Это прекрасно работает и возвращает отлично экранированную строку, которую я могу вставить в БД. Но если пользователь набрал свои комментарии в текстовом редакторе, таком как openoffice writer или msword, и использовал этот текст из него, ошибка возникает и выдает ошибку при вставке в БД

.
Incorrect string value: '\x93testi...' for column 'commnets' at row 1

Я думаю, что это происходит потому, что одинарные двойные кавычки в тексте, которые приходят из текстового редактора (openoffice, msword), не экранированы должным образом. Так как мне избежать этого, чтобы вставить его в БД. Пожалуйста, помогите мне

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

Ответы [ 2 ]

0 голосов
/ 12 марта 2014

Существует один способ обойти все эти маляры real_escape и ввести INTO sql того, что фактически предоставляется, а именно использовать возможность mysql для интерпретации шестнадцатеричного числа произвольной длины в виде строки.

например

$query=sprintf("update module set code=0x%s where id='%d'", bin2hex($code), $id);

Это работает, даже если code - это двоичное поле типа BLOB, а $ code - полные двоичные данные (например, содержимое файла изображения).

Вы также будете обходить любые инъекции sql с помощьюэтот.Я обнаружил, что использование sprintf для форматирования запросов является чрезвычайно мощным и безопасным, а использование php bin2hex () делает все, что угодно, включая двоичные файлы, в том числе и бинарные, которые могут попасть в базу данных незапятнанными.имейте в виду ..

0 голосов
/ 14 января 2012

Вы не отправляете действительную строку UTF8 для сохранения в БД. Вместо этого это, вероятно, набор символов для Windows.

Предположительно, ваши пользователи отправляют текст через веб-страницу - вам нужно убедиться, что вы обслуживаете страницу в UTF8, и когда форма отправлена, она также находится в UTf8 (что будет по умолчанию, если страница обслуживается в UTF8).

Вам необходимо:

Убедитесь, что вы отправляете кодировку UTF-8 в заголовках.

header ("Content-Type: text / html; charset = UTF-8");

И / или установить тип контента в своем разделе вашей страницы

Кстати, mysql_real_escape_string не имеет ничего общего с проблемой здесь. Эта функция используется для предотвращения использования строк, содержащих нормальные кавычки, для атак с использованием SQL-инъекций, что в любом случае лучше решить с помощью подготовленных операторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...