PHPで改行を削除する方法

PHPで改行を削除する方法

Posted at July 12,2013 1:11 AM
Tag:[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 );
関連記事
zenback
人気エントリー
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)