2010-07-16 72 views
9

我從使用mysql_real_escape_string進行過處理的數據庫中提取內容。 因此,新行字符現在顯示爲「\ n」。 問題是,這個內容會顯示給< pre>標籤中的用戶,所以我不能用< br />替換\ n。用實際換行字符代碼替換 n

我想我可以用實際的utf8字符代碼替換\ n,然後在< pre>中插入結果。

somoneone可以幫助嗎?由於安全策略,不使用mysql_real_escape_string並不是真正的選擇。

謝謝。

+1

我有點疑惑,通常你的數據應該返回轉義。您描述它的方式,就好像數據在存儲之前經過了兩次mysql_real_escape_string() – 2010-07-16 11:34:25

+0

實際上,您聽起來像是通過轉義兩次來過度清理數據。如果你放入'mysql_real_escape_string(「two \ nlines」);'數據庫中會有一個真正的'\ n'字符。如果你拿出數據,應該沒有必要把'\ n'替換回來。如果以這種方式保留它,那麼也可能會遇到'and「的問題。 – mvds 2010-07-16 11:36:41

+0

也許你是php中可笑的」magic_quote「功能的受害者 - 確保你禁用了它,它只會讓那些意識到這個概念的人感到困惑 – mvds 2010-07-16 11:40:15

回答

19
echo '<pre>'.str_replace('\n', "\n", $string).'</pre>'; 
+3

這會工作爲「速戰速決」,根本原因是被轉義兩次 – Max 2010-07-19 08:35:06

+0

數據直到我使用雙引號「\ n」'而不是單引號''\ n''出於某種原因,這才起作用。 – 2016-07-01 11:53:01

2
str_replace("\\n","\n",$data); 
-3

這可能有點幫助:

回聲( '測試\ NTEST'); 所示爲

測試測試

但 回波( 「測試\ NTEST」); 顯示爲

測試

測試

+1

echo('test \ ntest');應該顯示爲test \ ntest – 2010-07-16 11:37:15

1

我是從已使用mysql_real_escape_string消毒一個DB拉動內容。因此,新行字符現在顯示爲「\ n」

如果您還沒有對從數據庫中拉回來的原始數據做任何處理,那麼問題在於它插入時已被「消毒」兩次。

C.

1

爲什麼不......

echo str_replace('\\n', PHP_EOL, "few lines\nof text here,\nblah, blah! etc!");