2014-01-10 26 views
0

我在保存用戶輸入一段短文的精確外觀時遇到了很多麻煩。保存並顯示文本究竟是如何輸入和提交

我的問題是隨機斜線和html顯示。當人們在輸入消息的同時敲擊輸入時,「\ r \ n \」會在稍後回顯時顯示。我試圖修復這個問題,但現在當用戶在編寫消息時輸入撇號時,它會用3個反斜槓插入到數據庫中,並在稍後用3個反斜槓與撇號一起回顯。令人沮喪!我想重新開始!

這就是我所做的。

  1. 用戶在輸入字段中鍵入消息並點擊提交。
  2. 該消息通過php插入到類型爲varchar(280)的數據庫中。
  3. 該消息通過php回顯。

我已經嘗試了很多不同的東西像nlbrstrip_tagsstripslashesmysql_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>像文本)

相關問題