• 締切済み

改行コードについて

ファイルの文字コードは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に登録するのがいいものなのでしょうか?

みんなの回答

  • mpx
  • ベストアンサー率71% (149/209)
回答No.1

> \を多くつければ改行はできるようなのですがこれは仕様なの > でしょうか? 御質問の文面を読んでいる限り 仕様通りの正常な動作です。 簡単に説明します > $msg = str_replace("\r\n", "\n", $msg); > とやってみましたが改行されず普通に\r\nと表示され この文面からして、$msgの改行位置には 改行コードではなく'\r\n'と いう4文字の文字列が記録されています。 一方、str_replace("\r\n", での "\r\n" は改行コード(2文字)です。 そのため、マッチしないのでもとの$msgの文字列がそのままでます。 $msg = str_replace('\r\n', "\n", $msg); で試してみてください > $msg = str_replace("\\r\\n", "\n", $msg); この例では、\\が\という文字をエスケープした表現ですので "\\r\\n"は、'\r\n'という4文字の文字列になり置換ができています。 > LFの改行コードは\nなので登録時に\r\nではなく > \nと変換してからmysqlに登録するのがいいものなのでしょうか? 後処理を考えると、UNIX系でデータを使うなら\n、 Windowsで使うなら\r\nが良いでしょうが、 好みの問題ですのでどちらかに統一すれば良いと考えます。 ただ、改行位置に '\r\n'のように文字列を使うのではなく "\r\n"のように改行コードを使用しておいた方が今回の ような勘違いをしないですむと思います 注)説明文中の"" と''の使い分けを考えてください

dcx147
質問者

お礼

お返事ありがとうございます。 $msg = str_replace('\r\n', "\n", $msg); で試した結果正常に改行されました! 改行文をデバッグしてみると現状は\r\nとなっているようなので "\n"に変換してからmysqlに登録する方法に変更したいと思います。 質問前にマニュアルを見てみたのですがダブルクオテーションで 改行コードを囲んでいたのでなぜできないのか不思議でしたが 文字列としてではなく改行コードとして扱っている前提だった わけですね。 詳しいご説明ありがとうございました。

関連するQ&A