はじめに
実務にて、文字列から改行コードを変換・削除する作業があり、それを解決した情報になります。Web 開発の初心者、初学者の方にもわかりやすいように、ソースコードを編集してサンプルを公開しています、ご参考になれば幸いです。
検証環境
サンプル
解説
サンプルのソースコードを基に、改行コードを変換・削除する方法について説明します。
改行コードとは、改行を表している制御文字のことです。
制御文字とは、画面には表示されないけど、特別な動作をする文字のことです。もし見えているなら、スピリチュアル系プログラマーに向いていると思います。
改行コードには、CR(Carriage Return)、LF (Line Feed)、CR + LF(Carriage Return + Line Feed)の 3 種類が存在します。厳密には、CR は復帰コードといいます。
- CR : カーソルを行末から行頭に移動
- LF : カーソルを次行の同位置に移動
- CR + LF : カーソルを次行の行頭に移動
下記のように、矢印でイメージすると理解しやすいです。
- CR :
←
- LF :
↓
- CR + LF :
↵
改行コードの特殊文字は、下記のようになります。
- CR :
\r
- LF :
\n
- CR + LF :
\r\n
改行コードは、下記のように OS に環境依存します。
\r
: Mac OS 9 以前\n
: Linux, macOS 以降\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 文字列で確認できるようにしています。検証に役立ててください。
- CR :
0d
- LF :
0a
- CR + LF :
0d0a
以上です。
おわりに
サンプルのソースコードを再利用する際は、要件定義やコーディング規約にお気を付けください。