PHP で改行コードを変換・削除する方法

はじめに

実務にて、文字列から改行コードを変換・削除する作業があり、それを解決した情報になります。Web 開発の初心者、初学者の方にもわかりやすいように、ソースコードを編集してサンプルを公開しています、ご参考になれば幸いです。

検証環境

サンプル

解説

サンプルのソースコードを基に、改行コードを変換・削除する方法について説明します。

改行コードとは、改行を表している制御文字のことです。

制御文字とは、画面には表示されないけど、特別な動作をする文字のことです。もし見えているなら、スピリチュアル系プログラマーに向いていると思います。

改行コードには、CR(Carriage Return)、LF (Line Feed)、CR + LF(Carriage Return + Line Feed)の 3 種類が存在します。厳密には、CR は復帰コードといいます。

  1. CR : カーソルを行末から行頭に移動
  2. LF : カーソルを次行の同位置に移動
  3. CR + LF : カーソルを次行の行頭に移動

下記のように、矢印でイメージすると理解しやすいです。

  1. CR :
  2. LF :
  3. CR + LF :

改行コードの特殊文字は、下記のようになります。

  1. CR : \r
  2. LF : \n
  3. CR + LF : \r\n

改行コードは、下記のように OS に環境依存します。

  1. \r : Mac OS 9 以前
  2. \n : Linux, macOS 以降
  3. \r\n : Windows

ファイルに改行コードが混在していると、読み込みや書き出し処理でエラーや不具合の原因になる可能性があります。

混在を防ぐ為に、改行コードを変換して統一させる場合は、下記のように str_replace で実現できます。CR と CR + LF を LF に変換しています。

function convertNewline(string $str): string {
  return str_replace(["\r\n", "\r"], "\n", $str);
}

改行コードを削除する場合は、下記のように str_replace で空文字列に変換するだけで実現できます。

function removeNewline(string $str): string {
  return str_replace(["\r\n", "\r", "\n"], '', $str);
}

PHP_EOL は OS に環境依存します。下記のような方法は、使い所に気を付けましょう。

function removeNewline(string $str): string {
  return str_replace(PHP_EOL, '', $str);
}

サンプルコードでは、bin2hex で改行コードを下記のような 16 進表現に変換した ASCII 文字列で確認できるようにしています。検証に役立ててください。

  1. CR : 0d
  2. LF : 0a
  3. CR + LF : 0d0a

以上です。

おわりに

サンプルのソースコードを再利用する際は、要件定義やコーディング規約にお気を付けください。