PHP - Хранение текста в базе данных MySQL - PullRequest
6 голосов
/ 04 апреля 2009

У меня есть текстовое поле на моем веб-сайте, и мне нужно хранить все, что пользователь вводит в мою базу данных, и извлекать его позже. Мне нужно хранить его точно в том виде, в котором он был введен пользователем, включая специальные символы, возврат каретки и т. Д.

Какой процесс я должен использовать в PHP, чтобы сохранить это в поле моей базы данных (которое является текстовым полем)? Должен ли я использовать PHP html_encode или что-то подобное?

Thankyou.

Редактировать: мне также нужно хранить правильное форматирование, т.е. вкладки и несколько пробелов.

Ответы [ 5 ]

5 голосов
/ 04 апреля 2009

Используйте mysql_real_escape_string () :

$safetext = mysql_real_escape_string($_POST['text']);
$query = "INSERT INTO my_table (`my_field`) VALUES ('$safetext')";
mysql_query($query);

Это должно сработать.

4 голосов
/ 04 апреля 2009

Вы не должны html-кодировать данные при записи их в хранилище данных - таким образом, вы можете использовать свои данные и для чего-то другого (например, электронной почты, документов PDF и т. Д.). Как уже сказал Assaf : необходимо избегать SQL-инъекций, избегая ввода или используя параметризованные запросы на вставку.

Вы должны, нет, скажем, должны однако html-кодировать ваши данные при отображении на HTML-странице! Это сделает опасный код HTML или Javascript бесполезным, поскольку присутствующие в данных HTML-теги больше не будут распознаваться браузером как HTML-теги.

Процесс немного сложнее, когда вы позволяете пользователям размещать данные с HTML-тегами внутри. Затем вам нужно пропустить кодировку вывода в пользу санации ввода, которая может быть произвольно сложной в зависимости от ваших потребностей (допустимые теги, например).

3 голосов
/ 04 апреля 2009

Должно работать следующее:

if (get_magic_quotes_gpc()) {
  $content = stripslashes($content);
}
$content = mysql_real_escape_string($content);

Если у вас столбец utf8, у вас не должно быть проблем со специальными символами. После того как вы правильно отформатировали содержимое, вы можете передать его в mysql, используя стандартные методы вставки.

3 голосов
/ 04 апреля 2009

У вас нет для его кодирования, чтобы сохранить его в mysql.

Убедитесь, что вы используете параметризованную команду вставки, чтобы избежать внедрения SQL.

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

Чтобы правильно сохранить пользовательский текст в дополнение к форматированию, все, что вам нужно сделать, - это преобразовать все новые строки в разрывы, используя nl2br($inputtext). Сделайте это после фильтрации ввода.

...