PHP-改行文字を作成する方法は?


405

PHPでは、改行文字を作成しようとしています。

echo $clientid;
echo ' ';
echo $lastname;
echo ' ';
echo '\r\n';

その後、作成したファイルをメモ帳で開き、文字どおり改行を書き込みます。

1ジョンDoe \ r \ n 1ジョンDoe \ r \ n 1ジョンDoe \ r \ n

のさまざまなバリエーションを試しました\r\nが、どれも動作しません。改行が改行にならないのはなぜですか?


回答:


638

唯一の二重引用符で囲まれた文字列は、エスケープシーケンスを解釈\rし、\nあなたがしたいので、それぞれ「0x0Dの」と「は0x0A」のよう:

"\r\n"

一方、一重引用符で囲まれた文字列は、エスケープシーケンス\\としか知りません\'

したがって、一重引用符付き文字列を他の場所で生成された改行と連結しない限り(たとえば、二重引用符付き文字列"\r\n"を使用chrする か、functionを使用してchr(0x0D).chr(0x0A))、一重引用符付き文字列内で改行する他の唯一の方法は、文字列をエディタで入力することです。

$s = 'some text before the line break
some text after';

特定の文字シーケンス(\r\nたとえば)が必要な場合は、改行設定についてエディターを確認してください。


1
@Pacerier一重引用符で囲まれた文字列に改行と改行文字を含める唯一の方法は、キーボードから直接文字を入力することです(行末のエディターの設定に応じてEnterキーを押します)。それ以外の場合は、文字列連結を使用します。
ガンボ2014年

1
@Gumbo:一重引用符で囲まれた文字列を言っているのに対して、エスケープシーケンス\\と\ 'しか知りません。しかし、echoを含む行を<?php echo 'You are using Internet Explorer。<br>'として出力しました。echo '新しい行が追加されました'; ?>そして、ブラウザで出力を確認しました。それは私が表示した2つの文字列の間に文字通り新しい行を追加しました。これは、文字<br>または<br/>が単一引用符で囲まれた文字列に展開されることを意味します。これらの3つ以外に、PHPで単一引用符で囲まれた文字列内で理解できるHTML文字は他にありますか?それに応じて回答を更新してください。ありがとうございました。
PHPFan 2017年

1
@ user2839497あなたの言っていることが意味をなさない。ここにはブラウザのコンテキストはありません。そしてもちろん、ブラウザは<br/>に遭遇すると改行をレンダリングします。そしてもちろん、単一引用符で囲まれた文字列に「<br/>」を追加することを妨げるものはありません。しかし、それは単純なテキストファイルで改行をレンダリングしません。
フェンサー

1
@Pacerier Gumboがコメントで提案したようなエディターで文字列を改行する代わりに単一引用ポリシーの場合、Gumbos回答で他のソリューションを使用できます。例: 'outputing a newline'.chr(0x0A)。' '。
フェンサー

2
PHP_EOL代わりに使用する必要があります
kurdtpage

234

事前定義されたPHP_EOL定数を使用します。

echo $clientid, ' ', $lastname, PHP_EOL;

定数値は、PHPが実行されているオペレーティングシステムの行末に従って設定されます。Linuxでは、次のようになります"\n"。Windowsでは、になります"\r\n"


97

PHPの「echo」コマンドは、出力を未加工のhtmlとしてブラウザーに送信します。そのため、二重引用符で囲まれていても、HTMLの改行文字は何も意味しないため、ブラウザーは2行に解析しません。そのため、次のいずれかを使用する必要があります。

echo [output text]."<br>";

「echo」を使用する場合、または代わりにfwriteを使用する場合...

fwrite([output text]."\n");

これにより、「\ n」の代わりにHTML改行が出力されます。


4
質問の仕方で、解析またはプレーンテキストの読み取りがHTMLとしてレンダリングされないように、テキストボックスまたはJavaScriptなどにこのデータを出力している可能性があります
PC3TJ


23

二重引用符で""囲まれた文字列は、エスケープ文字を印刷可能な文字に変換することを意味します。

一重引用符で囲ま''れた文字列はリテラルです。つまり、文字が入力されたとおりに扱われます。

同じ行に両方を置くことができます:

echo '$clientid $lastname ' . "\r\n";
echo "$clientid $lastname \r\n";

出力:

$clientid $lastname
1 John Doe

PHPの文字列表記のさまざまなタイプについての説明は、質問の作成者が作成したエラーを示しているので問題ありません。ただし、変数は一重引用符付きの文字列で使用されているため、コードサンプルでは期待どおりの結果が得られず、前述のように、変数は補間されません。
Damien Flament 2017年

@Damien Flament、それが私が言ったことです-一重引用符の間の内容は補間されませんが、二重引用符の間の内容は補間されます。おそらく、リテラル "$ clientid"と "$ lastname"ではなく、$ clientidと$ lastnameの内容が表示されることを期待しているため、私の例は混乱します。これは、デバッグ中に使用したテーブルの見出しだったと思います。次の行はecho "$clientid $lastname\r\n"
ケビンS.ミラー

「期待される結果」を書くとき、私は質問作者がその質問で期待した結果について話している。コメントに表示されているコードを回答に追加して結果を表示すると、回答の質が向上する場合があります。
Damien Flament 2017年


13

実際に\r\nは出力のhtml側用です。これらの文字を使用すると、HTMLコードに改行を作成して読みやすくすることができます。

echo "<html>First line \r\n Second line</html>";

出力されます:

<html>First line
Second line</html>

ページの表示は次のようになります。

First line Second line

これを本当に意味しているのであれば、単一引用符を ""引用符で修正する必要があります。

echo "\r\n";

それ以外の場合、テキストを分割する場合は、サンプルの「最初の行」と「2番目の行」で、htmlコードを使用する必要があります<br />

First line<br />Second line

それは出力します:

First line
Second line

また、スクリプト全体を次のように置き換えると、読みやすくなります。

echo "$clientid $lastname \r\n";

1
いいえ、必要ありません。それはほとんど間違っているからです。最初のコードブロックは次のようにレンダリングされますFirst line Second line-改行を含むすべての空白は、レンダリングされた出力で1つのスペース文字に圧縮されます。また、</br>有効なHTML以外のものもあります。
D_4_ni 2013

1
また、phpスクリプトを使用してテキストメールを送信する場合でも、改行ではなく行末が必要です(<br>)
KennyV

9

w3schoolはこの方法を提供しました:

echo nl2br("One line.\n Another line.");

この機能を使用することでそれを行うことができます。私は上記の他の方法を試しましたが、それらは私を助けません。


問題は、HTMLの段落内の改行に関するものではありません。それはについてです改行文字
Damien Flament 2017年

コンテキストの場合、nl2br()関数は改行文字を<br />HTMLタグに変換します。これは、ブラウザページに改行を作成する場合に役立ちますが、テキストファイルやJavaScriptに改行を作成したり、画面やコンソールに出力したりする場合には役立ちません。
SherylHohman

4

何らかの理由で、PHPで改行のエスケープについて尋ねるすべての投稿で、単一引用符で囲まれた文字列に改行を挿入するだけで、思い通りの結果が得られる場合について言及していません。

例1。

 echo 'foo\nbar';

例1は明らかに望ましい結果を出力しませんが、単一引用符で改行をエスケープすることはできませんが、次のようにすることはできます。

例2。

 echo 'foo
 bar';

例2には、まさに望ましい動作があります。残念ながら、挿入される改行はオペレーティングシステムに依存します。\ r、\ r \ n、\ nのいずれであっても、Webブラウザー/サーバーは改行を正しく解釈するため、これは通常問題ではありません。

Webブラウザーや複数のオペレーティングシステム以外の方法でファイルを配布する場合は、明らかにこのソリューションは理想的ではありません。その場合、他の答えの1つが表示されます。

注:機能豊富なテキストエディターを使用すると、ファイルを編集するオペレーティングシステムとは異なるオペレーティングシステム上の改行を表すバイナリ文字として改行を挿入できるはずです。他のすべてが失敗した場合は、16進エディターを使用してバイナリーのASCII文字を挿入するだけで十分です。


3

PHP nl2brを使用して、テキスト文字列の改行を取得します。

$ text = "Manu is a good boy。(Enter)彼は上手にコーディングできます。

echo nl2br($ text);

結果。

マヌーはいい子です。

彼はうまくコーディングできます。


1
このnl2br関数は、改行文字を<br />HTMLタグに変換します。文字列に改行文字が含まれていない場合、この関数は何もしません!さらに、問題はHTMLの段落内の行を分割することではありません。それはについてです改行文字
Damien Flament 2017年

2

一重引用符と二重引用符の両方でこの組み合わせも試しました。しかし、どれもうまくいきませんでした。二重引用符で\nより適切に使用する代わりに<br/>。このような..

$variable = "and";
echo "part 1 $variable part 2<br/>";
echo "part 1 ".$variable." part 2";

問題は、HTMLの段落内の改行に関するものではありません。それはについてです改行文字
Damien Flament 2017年


2

エコーステートメントについては、常に<br>二重引用符で囲みます。


2
問題は、HTMLの段落内の改行に関するものではありません。それはについてです改行文字
Damien Flament 2017年

1

何もうまくいきませんでした。

PHP_EOL

. "\r\n";

$NEWLINE_RE = '/(\r\n)|\r|\n/'; // take care of all possible newline-encodings in input file
$var = preg_replace($NEWLINE_RE,'', $var);

私のために働く:

$admin_email_Body = $admin_mail_body .'<br>' ."\r\n";
$admin_email_Body .= 'This is line 2 <br>' ."\r\n";
$admin_email_Body .= 'This is line 3 <br>' ."\r\n";

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.