• ベストアンサー

改行コードについて

phpで開発をしています。 テキストファイルに文字列を出力する際に、改行コードを扱う以下のような場合について、 ①$str='ab\ncd'; ②$str="ab\ncd"; ①の変数の内容を出力すると\nがそのまま出力されます。 ②の変数の内容を出力すると改行されて出力されます。 質問ですが、この二つの違いについては、 ①のときは\nという文字として出力された。 ②のときは改行コードとして出力された。 (バイトコードで見ると、二つのコードは違っている?) という認識で良いのでしょうか。 ご教示いただけますと幸いです。

  • PHP
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.2

はい。その通りです。" と ' は機能が違います。 \n や \r などのエスケープシーケンスは " の中だけで有効です。 $a = 'ab\ncd'; $b = "ab\ncd"; var_dump( strlen($a) ); var_dump( strlen($b) ); 正確には、' の中でも、\\ と \' のエスケープシーケンスだけ有効です。

その他の回答 (2)

  • dell_OK
  • ベストアンサー率13% (740/5642)
回答No.3

そうですね。 こちらにもそのように書かれています。 https://www.php.net/manual/ja/language.types.string.php#language.types.string.syntax 引用符と二重引用符をご覧になってみてください。

  • RESOLD
  • ベストアンサー率41% (66/158)
回答No.1

たしか\nをそのまま書きたいときに'\とかしないといけないから、①だと値なのか\を表現したいのかわからなくなるから、かな? うろ覚えなんでこんなところでなく、ちゃんと調べてください。 'ab'\ncd' → abで切れてしまう "ab'\ncd" → \を表現したい箇所がわかる

関連するQ&A

  • 改行コードについて

    HTMLフォームのテキストエリアで改行した場合の処理についてご質問します。 Windowsのローカル環境で試しています。 改行コードLFでPHPを作成しています。 ○改行コードの認識 LF(\n) Unix,Mac OS X CR(\r) Mac OS 9 CRLF(\r\n) ○テキストエリアからの入力値の処理 CRLF、CRをLFに変換しています。 $value= str_replace ("\r\n", "\n", $value); $value = str_replace ("\r", "\n", $value); このあとDBに値を格納しています。 ○出力の際の処理 DBから値を取得。 phpのprint関数で下記を出力。 <textarea >${value}</textarea> 上記処理で、ローカル、サーバともに正常に動作しています。 しかし改行コードがLF(\n)なのでCRLF(\r\n)のWindowsで表示したときには問題が起きそうな気がします(実際には正常に動作)。 なにかしっくりこなくて質問させていただきました。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • fputで出力した文字列を改行するには?

    PHP初心者です。 いくつかの文字列変数をテキストファイルに書き出す処理を行いたいのですが、うまく動作してくれません。 文字列変数 $str_a, $str_b, $str_cをカンマで区切ってテキスト1行でファイルに書き出しています。 $str = $str_a . ',' . $str_b . ',' . $str_c . '\\r\\n'; fputs($fp, $str); 上の2行がループで数回呼ばれた後、ファイルをクローズしているのですが、実際に作成されたテキストファイルを見ると a1,b1,c1\r\na2,b2,c2\r\n....みたいに改行が入らず"\r\n"という文字列があるだけです。希望しているのは a1,b1,c1 <-ここで改行 a2,b2,c2 <-ここも改行 という結果なのですが.... よろしくご教授お願いいたします。

    • ベストアンサー
    • PHP
  • fpoenからの改行コードの扱いについて

    ただいまMacOSX(10以降)でプログラミングをしています。このOSでは改行コードはLFつまり、"\n"が当てはめられているはずです。(でいいんでしょ??) ///// abc.txt(改行や空白もそのまま)////// abc def ghi ///////////////////////////////////// このテキストをfopenで開き、fgetsで1文字ずつスキャンしていて"\n"にぶちあたるとある変数をインクリメントし、最後にその行数を出すというプログラムを書いてます。 この場合改行"\n"は3回あるので最終的に3+1、つまりこのテキストは4行あるということを表示できるはずなのですが、なぜか改行が1回としか認識されず結果2行のテキストとして出力されてしまいます。 いろいろ試した結果、どうやら"\n"を判断できている場所はその次が空白の行の場合だけなのです。つまり、コンピュータ的には ///// abc.txt(改行や空白もそのまま)////// abc\n ←ここは次にdefという文字列がきているので\nが認識されていない def\n ←ここしか認識されていない   \n ←同様に次の文字列がくるので認識されていない ghi ///////////////////////////////////// としか認識されていないようなのです。 なぜ\nの続きが文字列であると なぜこのようなことになるのでしょうか? \nの扱い方が間違っているのでしょうか?解決方法がおかる方がいればよろしくおねがいします。

  • 改行コードについて

    ファイルの文字コードはutf-8で改行コードはLFです。 メール送信時にメール文面の一部にいれるテキストを mysqlに保存しています。 メール送信のソース内でデータを読み込み送信までは できているのですが改行コードを変換したく $msg = str_replace("\r\n", "\n", $msg); とやってみましたが改行されず普通に\r\nと表示され うまく変換ができません。 いろいろと試した結果以下のソースでは正常に改行されました。 $msg = str_replace("\\r\\n", "\n", $msg); メール送信前にデバッグでしてみましたが読み込むデータの 改行部分は\r\nとなっているのは確認済みです。 \を多くつければ改行はできるようなのですがこれは仕様なの でしょうか? またmysqlに入れてあるデータはフォームから入力し登録 しているのですがLFの改行コードは\nなので登録時に\r\nではなく \nと変換してからmysqlに登録するのがいいものなのでしょうか?

    • 締切済み
    • PHP
  • (php) メールの改行コードについて

    phpでプログラミング中です。 メールを送信する際に 、メッセージ中に改行コードを入れたいのですが 思ったように改行してくれません。 (メールを送信はRestAPIを使って行っていますので、詳しくはわかりません) 実際には、思ったとおりに改行してくれていたのですが、そのRestAPIをバージョンアップしたら、改行されなくなってしまいました。 エディタ上での改行、 \n \r \r\n 全て試したのですが、  エディタ上での改行では、改行されず、 \r、\n、\r\n、全て2行改行になってしまいます。 PHP_EOLも使ってみましたが、改行されませんでした。 見た目、改行されているのはどうも、そのAPI自身が 70文字を超えたら改行しているように見えます。 他に改行するコード、改行する方法はありますでしょうか? 何でも試したいのです。 APIの開発元に聞いたり、バージョンアップの内容がわかればよいのでしょうが それを確認することは出来ない状態です。 何故出来ない? って言われそうですが。すみません。。。

    • 締切済み
    • PHP
  • 改行コードから改行コードまでをスプリットして配列に取り込む方法を教えて

    改行コードから改行コードまでをスプリットして配列に取り込む方法を教えてください。 ファイル「sample.txt」の中に 文字列A 文字列B 文字列C 文字列D 文字列E 文字列F 文字列G と書かれていたとします。このファイルを開き、配列@listに @list = 文字列A\r\n文字列B\r\n文字列C\r\n,文字列D\r\n文字列E\r\n,文字列F\r\n文字列G\r\n となるようなコードを教えてください。 要は二重改行コード\r\n\r\nをスプリッタとして複数の行を配列に取り込む方法です。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • C#: 改行コードを含む文字列の長さ検出

    前略  下記のような改行コードを含む文字列について、”改行コードを1文字として、文字列の長さを取得”したいのですがどのようにすればよいのか教えてください。 string str = "aaa\nbbb\nccc\nddd\n"; str.Length では 改行コードを含まない値が取得されてしまいます。 以上、よろしくおねがいします。

  • 改行コード等について

    Winで普通のテキストエディタで改行やタブ等すると、実際には改行コード(\n\r等)を入力していると思います。そのコードを含めた文字列を全て表示して見てみたいのですが、どうすれば見られるでしょうか?

  • 改行文字を消す方法を教えて頂けませんか。

    こんにちは。 C言語で、改行まで文字列として格納した変数から、改行のみを削除する事は可能でしょうか。構想としては、 char *str = "text改行" ↓ 改行部分を削除 ↓ str == "text" になるのがベストです。 良い方法をご存知であれば教えて頂けないでしょうか。どうぞよろしくお願いします。

  • PHP初心者です。コード内容を教えてください。

    PHP初心者なので以下のコードをお教えいただき たいです。これは改行について解説しているところに 出てきた例文です。 質問1 コードの1を実行した結果がブラウザ表示だと改行なし ソース表示だと改行ありで表示されるのですが、それがよく わかりません。'で文字列を囲うとそのまま出力されるため htmlで<br>されないというのはわかるのですが、ソース 表示が改行されているのが分かりません。ソースで改行 するには/(逆)nやPHP_EOLを使わなければ改行できないので はないでしょうか? (PHPコード1) $str = '改行を削除して処理します。<br> ダブルクオートじゃないと改行文字は扱えません。'; $str = str_replace(array('<br>','', '$str); echo $str; 質問2str_replace関数がありますが、この手のわからない 関数をリファレンスで引くと str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] ) : mixed のように説明には書いているのですが、str_replace("2","3","1"); 1の中の2すべてを3に置き換える。これはわかります。しかし、 説明例文に記載のmixedやら[, int &$count ] ) : mixedはよくわかりません これは何なのでしょうか? 長くなりましたがどうか回答お願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう