2012-07-10 64 views
4

打破我在文本區輸入保存換行符數據庫驗證碼:保存符合了preg_replace

$input = preg_replace("/(\n)+/m", '\n', $input); 

考查在數據庫中輸入,換行符實際保存。
但問題是當我想要回顯出來,在輸出中不會出現換行符 ,我該如何在輸入中保留換行符,並且還將它們回顯爲 。我不想使用<pre></pre>

+0

的可能重複[如何從字符串中刪除換行符(沒有字符!)?(http://stackoverflow.com/questions/10757671/how-to-remove-line-breaks-no-字符) – kenorb 2015-03-03 00:27:39

回答

3

您正在使用文字兩個字符序列\n(反斜槓+ n)替換$input中的換行符的實際序列 - 不是換行符。從數據庫讀取時,這些需要轉換回換行符。雖然我懷疑你打算把這些實際的換行符在數據庫中,應使用雙引號的字符串,而不是...

$input = preg_replace('/(\n)+/m', "\n", $input); 

注意,我更換了單引號和雙第二個字符串的第一個字符串分隔符引號。 \n是正則表達式中的一個特殊序列,用於表示換行符(ASCII 10),但它也是PHP中用於表示相同的字符轉義 - 兩者有時可能會發生衝突。

+0

你是對的,我發現,我不得不將輸出轉換回新的行。我使用下面的代碼,它的工作原理:$ output = preg_replace(「/(\ n)+/m」,'
',$ output); – bodesam 2012-07-10 12:59:36

1

我認爲PHP有​​解決方案:

nl2br -

編輯字符串中的所有新行之前插入HTML換行:您可能需要更換CR/LF使它好好工作。

// Convert line endings to Unix style (NL) 
$input = str_replace(array("\r\n", "\r"), "\n", $input); 

// Remove multiple lines 
$input = preg_replace("/(\n)+/m", '\n', $input); 

// Print formatted text 
echo nl2br($input); 
+0

謝謝,nl2br的問題在於,如果將輸入複製並粘貼到文本區域中,而不是直接輸入並按Enter鍵,則不起作用。 – bodesam 2012-07-10 12:53:09

+0

我認爲你需要清除CRLF。請看看我的編輯。 – Florent 2012-07-10 12:59:48

+0

這種方法工作得很好,謝謝。 – bodesam 2012-07-11 12:15:11