2011-07-05 11 views
6

何らかの理由でpreg_replace("/\\n/", "<br />", $string);が機能していません。preg_replace nを文字列

この形式の文字列出力は、preg replaceの後でもblah blah blah\nblah blah blahです。

<br />の場合は変更してください。

nl2br()でも動作しませんが、その正文としてはわかりませんでした。

おかげ

**更新**

文字列内の単語でのpreg_replace作品。リテラル\nはなく、実際に新しい行を置き換えたい場合:(

+4

本当に '\ n'が出力されますか? '\'と 'n'だけでなく、改行であると確信していますか? – KingCrunch

+0

いいえ...これは、なぜnl2brがうまくいかず、私のpregに '\\ n'が' \ 'をエスケープするために置き換えたと考えた理由です。 –

+0

私はデータベースに挿入していません...これはちょうどウェブサイトに表示する –

答えて

5

この

str_replace("\n", "<br />", $string); 
+0

は、felixが提案しているように一重引用符で動作します。 :) thanks –

+0

これは一重引用符で動作する可能性があります(実際には、一重引用符付きのpreg_replaceはテストスクリプトでは機能しません)が、preg_replaceが機能しない理由を説明していません。 – NotoriousWebmaster

+0

ほとんどの場合、一重引用符では動作しません。 –

7

を試し、試してみてください。

<?php 
echo preg_replace("/\\\\n/", "<br />", 'Hello\nWorld'); 

お知らせをバックスラッシュの数の二重引用符で囲まれました。文字列/\\\\n/は、PHPエンジンによって/\\n/と解釈されます。この文字列は、プレグエンジンに渡されると、\nと解釈されます。

PHPは両方とも"\n"をASCII文字の0x0Aと解釈します。同様に、pregエンジンは、改行文字(どちらが正確かわからない)として'/\n/'を解釈します。

+0

'' Hello \ nWorld''は一重引用符で囲まれているので、あなたは改行改行の置換をテストしていません。これはうまくいきます: 'echo preg_replace("/\\ n/"、" "、" this that ");' Enterを押して次の行の引用符を閉じることで "this"と "that"の間のスペースを置き換えます。 )。 –

4

RegExで複数の改行を試しましたか?

preg_replace("/\\n/m", "<br />", $string); 
+0

+1 '\ n'は複数行モードが必要です。 – hakre

+0

追加のエスケープでのもう1つの答えは、この場合の適切な答えです。私は同じ問題に直面していた、文字 '\'の後に文字 'n'が続き、その目的はそれを単一の0x0A改行文字に置き換えることです。 – KenB