ほとんどの場合、1つのインタラクティブなWebサイトに関して、複数行のコンテンツをWebクライアントブラウザーに出力する場合、私の意見では、<BR />
が他の2つよりはるかに望ましい:\n
またはPHP_EOL
。
それ以外の場合は、「<pre></pre>
」を使用して出力コンテンツをラップするか、nl2br()
を使用して<BR />
を\n
の前に挿入して、HTMLで複数行マークを有効にする必要があります。次の例のように。
$fruits = array('a'=>'Apple', 'b'=>'banana', 'c'=>'cranberry');
// Multiple lines by \n
foreach( $fruits as $key => $value ){
echo "$key => $value \n" ;
}
// Multiple lines by PHP_EOL
reset( $fruits );
while ( list($key, $value) = each( $fruits ) ){
echo ("$key => $value" . PHP_EOL);
}
// Multiple lines by <BR />
reset( $fruits );
while ( list($key, $value) = each( $fruits ) ){
echo ("$key => $value <BR />");
}
ログファイルなどのファイルにデータを書き込むときにPHP_EOL
が役立つと考える人もいます。プラットフォームに関係なく、改行が作成されます。
それから、私の質問は\n
を使用するときですか? \n
とPHP_EOL
、および<BR />
の違いは何ですか?誰もが長所と短所の大きなリストを持つことができますか?
DOS、Unix、およびMac(OS X以前およびOS X)はすべて、「次の行に進む」ことを表すために異なる文字または文字の組み合わせを使用します。
DOS-CR + LF(ASCII 13の後にASCII 10、または\r\n
)が続く)を使用して、新しい行を表します。
Unix-LF(ASCII 10、または\n
)]を使用して新しい行を表します。
Mac(OS X以前)-CR(ASCII 13、または\r
)を使用して、新しい行を表します。
Mac(OS X)-Unixと同様に、LFを使用して新しい行を表します。
したがって、それぞれをいつ使用するかは、目的によって異なります。移植性を意図せずに特定のプラットフォーム向けに作成している場合は、文字または文字の組み合わせを使用して、そのプラットフォームにとって重要な行を区切ります。 PHP_EOL
の目的は、新しい行がプラットフォームに依存しないように、プラットフォームの正しい文字を自動的に選択することです。
ブラウザーは表示用に空白を表示スペースに折りたたむため、これらはすべてブラウザー内の単一のスペースとして表示されます(前述の<pre>
または空白の動作を変更するCSSを使用している場合を除く)。 <br>
は、前述のとおり、これらの\n
改行文字を<br>
に変換し、HTML表示で改行を挿入する場所です。
<br>
は、テキストを分割するときにのみ使用されます。これはhtmlドキュメント内の要素のスペーシングに使用されますが、margin
などのCSSでレイアウトのスペーシングを実現する必要があるため、これは目的ではありません。適切な使用例は次のとおりです。
<p>This <br> is <br> some <br> text.</p>
通常、読みやすくするためにテキストを改行で分割します。そのため、ドキュメント内で改行をレンダリングしたくありません。つまり、<br>
タグが必要です。
Html要素<pre>
は、デフォルトでCSSルールwhite-space: pre;
を使用する要素であり、ドキュメントの空白がその要素内にレンダリングされます。通常、ドキュメント内の空白の量に関係なく、単一のスペースのみがレンダリングされます。このスタイルの非常に良い使用法は、コードブロックです。コードブロックを記述する場合、意図したとおりに自然にスペースを空け、各行の周りに<p>
タグをラップすることは特に気にしません(とにかくセマンティックではありません)。 <br>
どちらか。さらに悪いことに、コードのインデントがあります!ここでwhitespace: pre
は非常に理にかなっています。
<pre>
function foo() {
//etc
}
</pre>
PHPコードを実行しているプラットフォームに応じて、\r
、\n\
、または両方の\r\n
を使用して改行をレンダリングする必要があります。 PHP_EOL
が自動的に選択するため、これが最も動的なアプローチです。
HTMLの改行<br>
を実際のテキストの改行と比較しても意味がありません。 <br>
はブラウザのWebサイトのレンダリングのラインページにすぎませんが、\n
とPHP_EOL
は実際のソースコードの改行です。
ご自身でお話ししたように、PHP_EOL
はプラットフォームに関係なく機能するため、\n
よりも優先されます。当初、\n
はUNIXの標準的な改行のみでしたが、Macintoshは\r
を使用し、Windows/DOSは\r\n
の2つの組み合わせを使用していました。ただし、PHP_EOL
を使用する場合、プラットフォームについて心配する必要はまったくありません。
現在、ほとんどのシステムとエディターは、使用することにした改行を受け入れることができますが、正しいを使用することは明らかに推奨され、PHP_EOL
で最も簡単に達成されるため、理由はありません使用しないでください。
Cronでスクリプトを実行し、結果をログファイルに保存する必要があります。ただし、ブラウザでスクリプトを実行することもあります。正しい行末文字を使用するために、次のテストを実行します。
<?php
$eol = (isset($_SERVER['Shell'])) ? PHP_EOL : "<br />";
echo "DISCOVER". $eol;
?>
_
<br>
_
HTML設計用に作成されました... _<br>
_は、コンテンツタイプが_<HTML>
_をサポートするまで、多くの場所で機能しません。
コンテンツタイプがテキストのメール関数のexample1 ... _<br>
_は機能しませんが、_/n
_は機能します。
異なる結果が表示される他の例。
例2
_<html>
<body>
<script>
document.write("Hello \n World!");
</script>
</body>
</html>
_
Document.writeがDOMに書き込むとき、使用する必要があります
改行用。 関連するMDNドキュメント
例3
_txt = "Hello \n World!" ;
alert(txt);
_
alert
関数はメッセージをユーザーに表示するように要求しているため、HTMLを含むポップアップウィンドウとは異なります
_
/n
_
基本的に改行のためにほとんどのプログラミング言語で一般的であり、ほとんどのプラットフォームで動作します。 _\n
_および_PHP_EOL
_は、実際のソースコードの改行です。
通常、プラットフォーム固有の出力には定数PHP_EOLを使用する必要があります。
主にファイル出力用です。実際、Windowsシステムでは、fopen(…, "wb")
バイナリモードで使用しない限り、ファイル関数はすでに_\n ←→ \r\n
_を変換します。ただし、ファイル入力の場合は、_\n
_を選択する必要があります。ほとんどのネットワークプロトコル(HTTP)は_\r\n,
_を使用することになっていますが、これは保証されていません。
したがって、_\n
_に分割し、オプションの_\r
_を手動で削除するのが最善です:
例
_$lines = array_map("rtrim", explode("\n", $content));
_
より堅牢で簡潔な代替方法は、preg_split()と正規表現を使用することです。
_$lines = preg_split("/\R/", $content);
_
_\R
_プレースホルダーは、_\r + \n
_の任意の組み合わせを検出します。したがって、最も安全で、Classic _MacOS ≤ 9
_テキストファイルでも動作します(実際にはほとんど見られません)。
古いMacが\ rを使用していることに注意してください。これはより良い解決策です:preg_replace('~\r\n?~', "\n", $str);
_
PHP_EOL
_
ログファイルなどの出力を書き込むときに使用する必要があります。
プラットフォームに固有の改行が生成されます。
サーバープラットフォームで使用される改行文字を保持する定数です。 Windowsの場合、\ r\nです。 * nixでは、\ nです。どうやらWindowsサーバーがあります。
Flavioのコードを使用して、シェルで実行するかブラウザで実行するかにかかわらず、常に正しい改行を設定する関数を作成できます。
<?php
function nl($string) {
if(isset($_SERVER['Shell'])) return preg_replace('/\<br(\s*)?\/?\>/i', PHP_EOL, $string);
return nl2br($string);
}
print nl("One\nTwo<br>Three\r\nFour<br />Five
Six" . PHP_EOL);
?>