2011-07-01 6 views
1

誰かが自分のサイトでグループを作ったばかりで、説明は\n\rです。事は、私はすでに説明テキストにこれを行うことです。nl2br()を使用した場合、なぜ n rが表示されますか?

//Convert all urls to links 
$group_description = preg_replace('#([\s|^])(www)#i', '$1http://$2', $group_description); 
$pattern = '#((http|https|ftp|telnet|news|gopher|file|wais):\/\/[^\s]+)#i'; 
$replacement = '<a href="$1" target="_blank">$1</a>'; 
$group_description = preg_replace($pattern, $replacement, $group_description); 

$group_description = str_replace("\'" , "'", $group_description); 
$group_description = nl2br($group_description); 

/* Convert all E-mail matches to appropriate HTML links */ 
$pattern = '#([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.'; 
$pattern .= '[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)#i'; 
$replacement = '<a href="mailto:\\1">\\1</a>'; 
$group_description = preg_replace($pattern, $replacement, $group_description); 

あなたはこの出来事hereを見ることができます。

あなたはそれがそこに表示されて参照してください。\n\r Welcome to Join

なぜ<br />タグになりませんでしたか?

これはおそらく重要であり、ここで私が最初の場所でDBにこのテキストを配置する方法である:

$group_description = mysql_real_escape_string($_POST['group_description']); 
// And then insert the $group_description into the db without doing any more operations on it. 

私はまだ\n\rを取得していますなぜ任意のアイデア?

+0

'\ r \ n '特殊な文字ではなく、単なるテキストがあります。これらは文字通り4文字です:バックスラッシュ、r、バックスラッシュ、n – zerkms

答えて

6

問題は、\ rと\ nがそれぞれ "\" "r"と "\" "\ n"としてデータベースに保存されていることです。キャリッジリターンや改行文字として保存されるのではなく、スラッシュ文字の後ろに文字が続きます。 nl2br()に電話をしているときは、それはテキストの表現ではなく、改行文字を探しています。うまくいけばそれは理にかなっている。

正規表現(preg_replace)またはstr_replaceを使用して置き換えることができます。しかし、おそらくこの問題は、データがデータベースにどのように挿入されるかによって発生します。例えば

$string = str_replace('\n', "\n", $string); 
$string = str_replace('\r', "\r", $string); 

あなたは私は2番目の最初の1と、二重のための単一引用符を使用していることに気づくでしょう。一重引用符を使用する場合、 "\ r"と "\ n"は特殊文字ではなくテキストとして保存されます。それはなぜ彼らがあなたのデータベースに適切に保存されていないのかによるものです。

+0

"でも問題はおそらく" ---確かに**問題です - データがどのように挿入されているのでしょうか?だから唯一の解決策は、問題の根を解決することであり、余波を解決することではありません。 – zerkms

+0

@zerkms - 私はもっと同意できませんでした。 :) –

+0

本質的に、挿入時には、mysql_real_escape_stringの呼び出しの前にnl2brを実行する必要があります - 正しい? – Genadinik

2

あなた自身で回答しました。 mysql_real_escape_stringは改行をエスケープシーケンス\r\nに変換します。

最初に変換を適用する必要があります(nl2brを含む)。mysql_queryの直前にデータベースをエスケープ/マーシャリングする必要があります。 (でも、データベースAPIを使う方がはるかに簡単です。)

関連する問題