2011-12-12 62 views
2

我無法從數據庫中獲取數據並在HTML頁面textarea中回顯出現問題。Textareas,New Lines和nl2br的問題

這是用於將數據進入數據庫的代碼:

$_SESSION['content'] = mysqli_real_escape_string($link, strip_tags($_POST['content'],'<a>')); 

這條簡單的HTML標籤除了在數據庫鏈接和商店。如果你看看數據庫,換行符是不可見的,所以我假設它們是\ n和\ r。

如果我輸入到一個文本:

This should be a 

New line 

數據庫存儲此爲:

This should be a<br> 
New line 

當呼應出到一個文本,這是錢包顯示:

This should be a \r\n\r\nNew line 

我敢肯定,我失去了一些非常簡單的東西,非常感謝任何幫助。

UPDATE:

如果我刪除mysqli_real_escape_string,換行符將被保留,並完美地工作,我必須犧牲安全嗎?

解決:

mysqli_real_escape_string引起的問題,不要回聲出已經有這個應用的變量。從數據庫插入,刪除等時只能使用mysqli_real_escape_string,而不能在之前,絕對不能在之後;)

謝謝大家!

+0

嘗試使用'$ _ POST [ '內容'] =的stripslashes($ _ POST [ '內容'])'在發佈行之前。然而,我不確定這將有助於... http://php.net/manual/en/function.stripslashes.php –

+0

當然,這隻會剝離新的換行符,使\ n - > n? – Cristian

+1

@ user964145不是如果在數據庫中它們被存儲爲\\\ n(它轉義斜線) – Prisoner

回答

1

首先,你不應該使用nl2br,因爲這會改變你的\n<br>'s。

您很可能需要去掉斜線echo stripslashes($_SESSION['content'])

以下進一步的評論

編輯:

如果數據被存儲爲<br>的數據庫中,你可以做str_replace('<br>',"\n",$string);這將<br>轉換的成\n

+0

這使\ n和\ r變成n和r。我想回到我寫的文本框中,保留換行符 – Cristian

+0

非常抱歉,剛剛意識到換行符在數據庫中存儲爲
,我可以將這些
標籤轉換爲textarea的新行嗎? – Cristian

+0

@ user964145你可以向我們展示存儲在數據庫中的數據嗎? – Prisoner

0

的nl2br函數正在將該內容作爲字符串處理: http://codepad.org/M2Jw9KQJ

這使我相信你並沒有迴應你聲稱的內容。

您確定數據庫中的內容與您說的一樣嗎? 也許你需要全面走另一條路:

功能br2nl($數據){回報的preg_replace(" < BR * >!。!iU "," \ n ",$ data);}

+0

提交內容時,會應用mysqli_real_escape_string和strip_tags。在數據庫中,新行代表
標籤。然後將修改後的內容回送到textarea中,而不是換行,而只是\ n \ r,例如'This is a \ r \ n \ r \ nnew line' – Cristian

+0

http://codepad.org/ VuHE9Kmw –

1

這個工作f或我:

function br2nl($input) { 
    return preg_replace('/\<br.*\>/Ui', '', $input); 
}