web-dev-qa-db-ja.com

改行または\ r \ nを<br/>に置き換える方法は?

いくつかの新しい行を単に置き換えようとしています。 3つの異なる方法を試してみましたが、変更はありません。

$description = preg_replace('/\r?\n|\r/','<br/>', $description);
$description = str_replace(array("\r\n","\r","\n"),"<br/>", $description);
$description = nl2br($description);

これらはすべて機能するはずですが、私はまだ改行を取得します。それらは二重です: "\ r\r"。それでは、これらのいずれかが失敗することはありませんか?

65
Thomas McCabe

nl2br() 関数は既にあります 置き換える inserts改行文字の前の<br>タグ:

例( codepad ):

<?php
// Won't work
$desc = 'Line one\nline two';
// Should work
$desc2 = "Line one\nline two";

echo nl2br($desc);
echo '<br/>';
echo nl2br($desc2);
?>

それでも動作しない場合は、テキスト$desciptionが二重引用符で囲まれていることを確認してください。

これは、単一引用符が二重引用符付き文字列と比較して\nなどのエスケープシーケンスを「展開」しないためです。 PHPドキュメントからの引用:

:二重引用符およびヒアドキュメントの構文とは異なり、特殊文字の変数およびエスケープシーケンスは、単一引用符で囲まれた文字列に出現しても展開されません。

118
Robik

これを使ってみてください

$description = preg_replace("/\r\n|\r|\n/",'<br/>',$description);
58
afarazit

文字列(@Robikのように、単一引用符の文字列)に実際の文字「\」を含めることができます。

「\ r」または「\ n」文字列も同様に置き換える必要がある場合、ここでは特殊文字についてではなく、2つの文字「\」および「r」のシーケンスについて説明し、「\ '置換文字列で、動作します:

str_replace(array("\r\n","\r","\n","\\r","\\n","\\r\\n"),"<br/>",$description);
15
regilero

nl2br()あなたが持っているようにうまく動作するはずです:

$description = nl2br($description);

サンプルコードの最初の行にある閉じられていない'が問題の原因である可能性が高くなります。 $ descriptionの後の 'を削除...

...$description');
5
sakatc

nl2br()は私のために働いたが、変数を二重引用符で囲む必要がありました:

これは動作します:

$description = nl2br("$description");

これは機能しません:

$description = nl2br($description);
3
infografnet

これは確実に機能します:

str_replace("\\r","<br />",$description); 
str_replace("\\n","<br />",$description); 
2
Radeck

これを試してください:

echo str_replace( array('\r\n','\n\r','\n','\r'), '<br>' , $description );
2
l2aelba
$description = nl2br(stripcslashes($description));
1
softcod.com

Str_replace(array( "\ r\n"、 "\ r"、 "\ n")、 ""、$ string);動作します。

0