web-dev-qa-db-ja.com

PHP改行(\ n)が機能しない

何らかの理由で、PHPでファイルに出力するときに\nを使用してラインフィードを作成することができません。 「\n」をファイルに書き込むだけです。 「\\n」も使用してみましたが、「\ n」と書かれているだけです(期待どおり)。しかし、私の人生の中で、なぜ\ nを文字列に追加しても新しい行が作成されないのか理解できません。私も\r\nを試しましたが、ファイルの行に「\r\n」が追加されています。

例:

error_log('test\n', 3, 'error.log');
error_log('test2\n', 3, 'error.log');

出力:

test\ntest2\n

問題がある場合は、OSXでMAMPを使用します(ある種のPHP構成の事柄?))。

助言がありますか?

31
ggutenberg

二重引用符を使用します。 "test\n"は問題なく動作します(または、'test' . PHP_EOL)。

文字列が二重引用符( ")で囲まれている場合、PHPは特殊文字のエスケープシーケンスをさらに解釈します。

http://php.net/manual/en/language.types.string.php

49
ceejayoz

\nは、エンドユーザーが改行として表示することを意図していないため、html <br/>要素を使用する必要があります。/nは、phpによって生成されたhtmlがWebページのソースコードにどのように表示されるかにのみ影響します。 Webページに移動して「ソースの表示」をクリックすると、phpで生成されたhtmlが1つの長い行として表示されます。きれいじゃない。それが\n;のphpが生成したhtmlをより短い行に分割するためのものです。 \nの目的は、よりきれいな「ソースの表示」ページを作成することです。

26
Huraiby

PHPスクリプトをブラウザで実行すると、デフォルトでHTMLとしてレンダリングされます。使用している本がそれ以外の場合に表示される場合、コードまたはイラストのいずれかが不正確です。 「ソースの表示」を使用してブラウザに送信されたものを表示すると、ラインフィードが存在することがわかります。

<?php
echo "Line 1\nLine 2";
?>

これはブラウザで次のようにレンダリングされます:

Line 1 Line 2

プレーンテキストをブラウザに送信する必要がある場合は、次のようなものを使用できます。

<?php
header('Content-type: text/plain');
echo "Line 1\nLine 2";
?>

これは出力します:

Line 1
Line 2
8
nilesh

私はあなたがhtmlファイルに出力していると確信しています。問題は、htmlがソース内の改行を無視することです。つまり、結果のページ表示で改行が必要な場合は、改行を<br/>に置き換える必要があります。

6
Souhaieb Besbes

nl2br()新しい行を作成するための関数の使用

echo nl2br("Welcome\r\n This is my HTML document", false);

上記の例は出力します:

ようこそ
これは私のHTMLドキュメントです

4
Pankaj Monga

二重引用符を使用する必要があります。二重引用符には、より多くのエスケープ文字があります。

error_log("test\n", 3, 'error.log');
error_log("test2\n", 3, 'error.log');
3
oshirowanen

\nを二重引用符で囲むには、


$LOG = str_replace('\n', "\n", $LOG);
2
aaron

アポストロフィ( ')を使用しているためです。代わりに引用符( ")を使用してください。 'プロンプトPHPアポストロフィの間にあるものを文字どおりに使用するには、.

2
Jan Kuboschek

二重引用符が必要です。一重引用符は\エスケープを無視します。二重引用符も変数式を評価します。

詳細については、phpマニュアルの このページ を確認してください。

2
Matt Stephenson

このようなものの後に改行(\ n)を付けて印刷したい場合:

<p id = "theyateme">Did it get eaten?</p>

上記を印刷するには、次のようにします。

<?php
  print('<p id = "theyateme">Did it get eaten?</p>' . "\n");
?>

上記のクライアントコードは次のようになります。

<p id = "theyateme">Did it get eaten?</p>

上記の出力は次のようになります。

食べましたか?

私はそれが難しいことを知っていますが、私はalwaysをそのようにして、そしてあなたほとんど常にそのようにする必要があります。

PHPは、JavaScriptコード(PHPによって生成された)のように改行を与えるのではなく、\ nをページに出力したい場合があります。

回答についてのメモ:あなたは次のようになるかもしれません:なぜエコーの代わりに印刷を使用したのですか(私は私のエコーが好きです)。これは、echoおよびprintfよりもprintを好むためです。これは、一部のケース(通常は私のケース)でうまく機能するためですが、この場合、echoを使用すると問題なく実行できます。

0
Ewer Ling