PHPで改行を削除する方法
PHPで改行を削除する方法を紹介します。
PHPビギナーの方向けの内容です。
1.問題点
次のような改行つきのテキスト(ヒアドキュメント)を想定します。
<?php
$text = <<<EOT
aaa
bbb
ccc
ddd
eee
EOT;
?>
この文字列から改行を削除して、$textの内容を
aaabbbcccdddeee
としたいのですが、改行を削除する方法が分かりません。
2.str_replaceで改行を削除する
str_replaceは検索文字列に一致したすべての文字列を置換する関数です。ネットで調べたところ、3項のpreg_replaceよりこちらが多数派でした。
str_replaceで改行(CR+LF)を削除するには、第1パラメータにCR+LFを示す「\r\n」を記述し、第2パラメータに空の文字列を設定します。これで返却される文字列の改行コードがすべて削除されます。
$text = str_replace("\r\n", '', $text);
すべての改行(CR/LF/CR+LF)に対応するには、第1パラメータに配列で改行コードを記述します。
$text = str_replace(array("\r\n", "\r", "\n"), '', $text);
第1パラメータが配列の場合、str_replaceは左から順番に処理を行うので、以下の記述ですべての改行コードを変換してくれるようです。
$text = str_replace(array("\r", "\n"), '', $text);
3.preg_replaceで改行を削除する
preg_replaceで改行(CR+LF)を削除するには、str_replace同様、第1パラメータにCR+LFを示す「\r\n」を記述し、第2パラメータに空の文字列を設定します。第1パラメータの両端にデリミタ(ここでは「/」)をつけるのを忘れないように気をつけましょう。
$text = preg_replace('/\r\n/', '', $text );
CR/LF/CR+LFのすべての改行に対応するには、第1パラメータにすべての改行コードを「|」で区切って記述します。
$text = preg_replace('/\n|\r|\r\n/', '', $text );
またはstr_replaceと同様、配列で改行コードを記述することもできます。配列で記述すると、str_replace同様、左から順番に処理を実行します。
$text = preg_replace(array('/\r\n/','/\r/','/\n/'), '', $text );
なお、preg_replaceで正規表現を利用するとパフォーマンスが落ちるようです。
パフォーマンスを向上させたい場合、正規表現の非キャプチャグループを使用するとよいでしょう。
$text = preg_replace('/(?:\n|\r|\r\n)/', '', $text );
- PHPでvar_dumpの情報をファイルに出力する方法
- PHPで「そのようなファイルやディレクトリはありません」というエラーになる場合の対処
- PHPで「Cannot modify header information - headers already sent by」というエラーになる場合の対処
- PHPで「Parse error: syntax error, unexpected '['」というエラーになる場合の対処
- php.iniファイルのパス・フォルダを探す方法
- PHPで「Fatal error: Maximum execution time of xx seconds exceeded」というエラーになったときの対処
- PHPのpreg_replace()で「The /e modifier is deprecated」となる場合の対処方法
- PHPで複数行の文字列を扱う方法
- ファイルアップロード後にPHPでファイルサイズを取得する
- PHPのmktime()で取得したタイムスタンプが8ヶ月前になる事象について