2014-01-10 2 views
0

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

Моя проблема, что случайные косые черты и html появляются. Когда люди нажимают клавишу ввода при вводе сообщения, «\ r \ n \» будет отображаться, когда он будет эхом позже. Я попытался это исправить, но теперь, когда пользователь вводит апостроф при составлении сообщения, он вставляется в базу данных с тремя обратными косыми чертами и, таким образом, эхом повторяет с помощью трех обратных косых черт с апострофом. Срыв! Я хочу просто начать все заново!

Вот что я делаю.

  1. Пользователь вводит сообщение в поле ввода и передает отправляет.
  2. Это сообщение вставляется в базу данных с типом varchar (280) через php.
  3. Это сообщение получает эхо через php.

Я пробовал много разных вещей, как nlbr и strip_tags и stripslashes и mysql_real_escape_string и другие. Возможно, я использую все это в определенной комбинации, которая его испортит.

Так что мой вопрос: Каков наилучший способ сохранить то, как кто-то составляет текстовый абзац, который позже будет отображаться через php, чтобы выглядеть так же, как они набрали его?

ответ

4
  1. Убедитесь Волшебные Кавычки выключены или, если вы не можете отключить их, очистить ваши строки из них. Прочтите руководство для получения более подробной информации: http://www.php.net/manual/en/security.magicquotes.php
  2. При вставке текста в базу данных избегайте его правильной работы для синтаксиса SQL после или, лучше, используйте подготовленные операторы. См. How can I prevent SQL injection in PHP? и The Great Escapism (Or: What You Need To Know To Work With Text Within Text).
  3. При выводе в HTML используйте htmlspecialchars, чтобы избежать проблем с введением HTML или простого синтаксиса, а затем используйте nl2br для форматирования разрывов строк специально для HTML.

Это в основном это.

+0

Как должен выглядеть текст в базе данных? У меня есть слэш с каждым апострофом, и я не знаю, если это ожидается. Я следовал вашим рекомендациям. Я убеждаюсь, что магические кавычки отключены, и я использую подготовленные заявления. Просто любопытно, как это должно выглядеть. Например: «Это не сработало». отображается в базе данных как «Это не работало». – Tom

+1

Текст в базе данных должен выглядеть точно так, как должен выглядеть. Ничего лишнего там не должно быть. – deceze

+0

Все еще не работает. Все, что я делаю, это подготовленный шаг заявления, и он все еще вставляет слэши.Должен ли я избегать отключения волшебных котировок во время выполнения, поскольку он устарел? – Tom

0

На втором шаге вам нужно избежать этого с помощью функции mysql.

Но для правильного outputing это вам нужно сделать следующее

<pre><?= htmlentities($mysqlRow['data']); ?></pre> 

Это позволит получить из результатов базы данных необходимую информацию и выводит его как есть. Со всеми пробелами и вкладками и html-тегами. (Если пользователь вводит <html> это будет выход <html> как текст)

Смежные вопросы