質問
私はユーザーが自分の記事をデータベースに提出するためのシステムを設定しています。 HTMLになるので、改行があるたびに<br />
の入力を知ることを期待したくないので、入力にPHP関数nl2br()
を使用しています。
私はまた、記事の修正ツールを提供しています。これはそれらの記事をフォームに戻します(ただし、これは別のページです)、編集できるようになります。これを行う際には、<br />
要素も表示されていました(Newlinesを使用して)。
登場
Elementsが表示されます(とにかく、とにかく予想していた)このサイトの別の質問にあるpreg_replace('/<br(\s+)?\/?>/i', "\n", mysql_result($result,$i,"content"))
を追加しました。 <br />
要素を削除するジョブを実行しますが、それが新たなものに置き換えられているため、投稿が編集されるたびに、もっと多くの新たな改行が追加され、パラグラフをより多くのものにしています。毎回。これはユーザーが理解できないものです。
例として、私は記事提出書に次のように入力します:
Hello, this is my article.
I am demonstrating a new line here.
.
これは次のように変換されます。
Hello, this is my article.<br />
I am demonstrating a new line here.
.
改行文字が変換されたとしても、テキストにはまだ改行があります。編集形式では、<br />
は改行に戻り、次のようになります。
Hello, this is my article.
I am demonstrating a new line here.
.
<br />
は改行に変換されたが、すでに改行がありました。だから私が期待していることはそれが最初にこのようなものに変換されることが私がそれのためです:
Hello, this is my article.<br />I am demonstrating a new line here.
.
私は疑問に思っています...元の改行を維持することからnl2br()
関数を停止する方法はありますか? Windows \r\n
文字を使う必要がありますか?
解決
使用している機能、nl2br
はそれらを挿入するために使用されますが、それらを置き換えません。\n
を<br />
に置き換えたい場合は、str_replace
を使用する必要があります。そのように:
$string = str_replace("\n","<br />",$string);
.
この状況では正規表現が絶対に必要ありません。
他のヒント
あなたが説明した問題はバグではなく、BL2BRの機能です。あなたはそれに対してあなた自身の関数を書くことができます。
<?php
function NlToBr($inString)
{
return preg_replace("%\n%", "<br>", $inString);
}
?>
.
これは、PHPマニュアルのNL2BR機能のドキュメントのコメントのコメントにあります。 http://php.net/manual/de/function.nl2br.php 。私が投稿したものがあなたのために働かなかったならば、それが来たところにたくさんのことがあるはずです。
(または掲示されたばかりの他の答えから関数を使用するだけで、それはうまくいけます)
これを修正する必要があります:
preg_replace('/<br(\s+)?\/?>(?!\s*\n)/i', "\n", mysql_result($result,$i,"content"))
.
同じ行にあるかもしれないので、単にブレークを削除することはできません。この正規表現はすべての休憩を改行で置き換えますが、その後に改行が続くものではありません。
<br>\n
をテキストに残します。追加の正規表現はそれらを取り除くでしょう:
preg_replace('/<br(\s+)?\/?>/i', "", $res)
.