【PHP】改行文字や空白文字の挿入や削除方法/trim関数やbrタグ

目次

phpで空白や改行を削除する場合とその方法

phpに関わらず、多くの言語で厄介なのが「見えない文字」対策です。この見えない文字こそが「改行」と「空白」。なぜ改行と空白を削除しなければならないのか、その理由をみてみましょう。

phpでは不要な改行や空白はエラーの原因になる

改行するつもりで使用した改行キーは、エラーの原因となると同時に、文字数としてカウントされてしまいます。 この場合、見た目のソースでは改行されていても、出力された文字列には改行<br>が含まれていません。ブラウザで改行がされていないのです。 また、空白(スペース)も問題が起こる理由があります。 システムを組むときスペースは半角と決まっていますが、日本語特有の全角スペースが書かれている場合があります。 この全角スペースはエラーの原因となるため、削除しなければなりません。さらに、文字列の最後に意味のない空白が入っていた場合には、レイアウトの崩れ、文字数カウントのエラーの原因にもなります。 エラーのないコードを書くためには、不要な改行や空白は削除し、用途に合わせた的確な処理を行うことが必要です。

エラーを出さないための適切なphp改行方法を身につける

phpでシステムを組む際、システム上で改行されるのか、ブラウザ上で改行が見えるようにするのかを考えなければなりません。 文字列をシステム上で改行できたとしても、ブラウザでは改行されません。改行するためには<br>タグを挿入する必要があるからです。 このように、適切なphpの処理を効率よく行うためには、不要となるものについて的確に正しく削除や処理を行わなくてはなりません。 改行と空白の処理を使いこなす関数や定数を覚えることは、エラーの出ないソースへと繋がるのです。

phpで改行・空白を削除する方法

では実際に、用途ごとに改行・空白を削除する方法を見てみましょう。 phpでよく使われる削除の関数に「trim」があります。

phpにおけるtrim関数の基本的な使い方

trimとは、文字列の先頭と末尾にある余分な文字列、または空白を削除する場合に使用します。 空白は半角スペース、文字列は通常の空白(” “)のほか、「タブ(”\t”)」「リターン(”\n”)」「改行(”\r”)」「NULL(“\0”)」「垂直タブ(”\x0B”)」も対象です。 書き方: 取得した文字列 = trim(対象文字列 [,削除する特殊文字]); string trim (string $str [, string $charlist]) trimを使うと、ソース上の改行・ブラウザ上の改行<br>も削除することができます。 改行の他、特定の文字列を指定する場合には、$character_maskパラメータを使用します。リストにして複数指定することも可能です。 書き方: string trim( string $文字列 [, string $character_mask] )

phpにおけるtrim関数の注意点

trim関数は、文字列の最初と末尾の不要な空白を削除する関数です。特定の文字列を削除する場合には$character_maskパラメータを使いますが、その際に最初と末尾になる文字列に注意しなくてはなりません。 例えば、 $text = ’ABCDEFGHIJK’; $trm = trim($text, ’BAE’); echo $trm; これを実行すると CDEFGHIJK となり、Eが削除されていません。 これは、Aを削除した時に最初の文字がBとなるからです。Bを削除した後は最初の文字はCとなり、Eは削除されません。 trimは指定した最初と末尾の文字が削除されるのです。 したがって、trim($text, ’B’)と指定してもBは削除されません。Bを削除するためには、Aも削除しなければならないのです。

では実際に、空白・改行を削除してみましょう。

【trim】文字列の最初と最後の空白や改行文字を削除する

基本的なtrimの使い方です。 $text1 = ’ AAAAAA ’; $text2 = ’ BBBBBB ’; //空白を取り除く $trm1 = trim($text1); $trm2 = trim($text2); var_dump($trm1, $trm2); 実行結果: string(7) ”AAAAAA” string(8) ”BBBBBB” 改行を取り除きたい場合は、$character_maskパラメータを使います。 string trim ( string $str [, string $character_mask = ” \t\n\r\0\x0B” ] ) ここでは、改行タブに当たる「タブ(”\t”)」「リターン(”\n”)」「改行(”\r”)」「NULL(“\0”)」「垂直タブ(”\x0B”)」を全て指定しています。必要に応じたタブを記載しましょう。

【ltrim】文字列の最初の空白や改行文字を削除する

最初の文字だけを削除することもできます。その場合にはltrimを使います。 lはleft(左)のことです。左端の空白を除去する関数という意味となっています。 <?php echo ’「’ . ltrim(’ abcdef ’) . ’」’; 実行結果: 「abcdef 」

【rtrim】文字列の最後の空白や改行文字を削除する

反対に、右側の空学を取り除く関数がrtrimです。末尾にある空白を除去することができます。 <?php echo ’「’ . trim(’ abcdef ’) . ’」’; 実行結果: 「 abcdef」 末尾には不必要な改行が挿入されていることも多くあります。その改行を削除する場合は、改行タグを指定します。 string rtrim ( string $str [, string $character_mask = ” \t\n\r\0\x0B” ] )

array_map関数とtrimlistを使って配列から空白を削除する

配列になっている各要素から一括で削除したい場合は、array_map関数を使い配列をtrimlistで指定して削除する方法があります。 $list = array(’ sakura’, ’ momo ’, ’ himawari ’, ’ rose ’, ’ ajisai ’); $trimList= array_map(’trim’, $list); var_dump($trimList); 実行結果: array(5) { [0] => string(5) ”sakura” [1] => string(6) ”momo” [2] => string(5) ”himawari” [3] => string(6) ”rose” [4] => string(9) ”ajisai” } array_map関数は1行で空白を削除できるので、覚えておくと便利でしょう。

trim関数で取り除けない改行・空白は?

trim関数は文字列の両端の改行や空白を削除する関数です。そのため、文字列の中にある改行・空白は削除できません。 また、空白は半角スペースのことを指しています。言語は基本英文のため、全角スペースは日本語独自のものです。そのため、trim関数では全角スペースを認識することができないからです。

文字列の中も含めて改行文字を削除する

文字列の中の改行文字はtrimでは削除することはできません。両端、文字列中に関係なく改行を削除したい場合は、置換する方法を使います。 改行は、OSによりコードが違います。 UNIX系 Mac OS X\nLF(ラインフィード) Windows\r\nCR+LF Mac(OS 9以前)\reCR(キャリッジリターン) 大概のサーバーはUNIX系なので”/n”で問題ありませんが、Mac上の仮想サーバーやwindowsサーバーを利用している場合は気をつけなければなりません。 そこで、OSに関係なく削除できる「PHP_EOL」を利用します。これは、OSを自動判定し改行文字を自動的に設定してくれる定数です。 echo ’改行’; // UNIX系なら \n が、Windowsなら \n\r が改行文字として自動設定される echo PHP_EOL; echo ’しました。’; 実行結果: 改行 しました。 ソース表示: 改行 しました。

全角スペースを削除する方法

これまで見てきた空白は「半角スペース」のことを言います。全角スペースは日本語由来のものなので、英語圏発祥のphp言語では全角スペースは認識しないため、trimでは削除することはできません。 全角の空白を削除するためには、全角スペースを半角スペースに置換して、その後trim関数に渡して削除する方法をとります。 <?php echo ’「’ . trim(mb_convert_kana(’ 前後に全角スペースが入っています ’, ”s”)) . ’」’; 実行結果: 「前後に全角スペースが入っています」 上記で削除できない場合は、文字コードが問題になっていることが考えられます。そこで、第三引数で文字コードを指定する方法を試してみると良いでしょう。 trim(mb_convert_kana(’ 前後に全角スペースが入っています ’, ”s”, ’UTF-8’));

全ての空白を削除する方法

trim関数, ltrim関数, rtrim関数は、全ての文字列の中にある空白を削除することはできません。しかし、文字列の中には不要な空白が紛れている場合が多々あります。 この文字列の中にある全ての空白を取り除きたい場合は、trimではなく、str_replace関数を使う方法があります。 str_replace関数は、検索した文字列に一致した全ての文字列を置換し、置換した文字列を返す関数です。 コード <?php $string = ’ abc d e f ’; $trimed = str_replace(” ”, ””, $string); var_dump($trimed); 実行結果 string(6) ”abcdef” このstr_replace関数の応用編として、改行コードを検索し、空文字列に置換することで、改行コードを削除することができます。 <?php // ファイルの内容を取得する $file = ’test.txt’; $text = file_get_contents($file); echo $text.”\n”; // 改行コードを’’(空文字)に置き換える $text = str_replace(PHP_EOL, ’’, $text); echo ’改行削除: ’; echo $text; ?> test.txt AAAAA BBBBB CCCCC DDDDD EEEEE 実行結果: 改行削除: AAAAABBBBBCCCCCDDDDDEEEEE 同じことができる関数にpreg_replaceがあります。しかし、このような単純な半角スペースの置換の場合は、str_replaceを使ったほうが高速に処理することが可能です。

phpでファイルから不必要な空白を削除する

ファイルの量が大きい場合、1行ずつ不要な空白や改行の確認と削除を行っていくことは大変です。 そのような場合は、ファイルごと削除し上書き保存できる方法があります。 読み込むファイル(php.txt) abcde fghijk lmnop サンプルプログラム // ファイルを読み込みモードで開く $fp = fopen(”php.txt”, ”r”); // ファイルを1行ずつ取得する while ($line = fgets($fp)) { $text[] = $line; } // ファイルを閉じる fclose($fp); // ファイルを書き込みモードで開く $fp = fopen(”php.txt”, ”w”); foreach ($text as $value) { // ファイルに書き込む $trm = trim($value); fwrite($fp, $trm.”\r\n”); } // ファイルを閉じる fclose($fp); 実行結果(php.txt): abcde fghijk lmnop この場合、fpen関数でファイルを開き、ファイルの内容を1行ずつ取得します。 取得した各行を配列で格納し、ファイルを閉じたあと、再度書き込みできる状態でファイルを開き、削除した文字列をfwrite関数を使ってファイルに書き込んでいきます。 こちらも、簡単な処理でファイル上の改行や空白を一度に削除できるため、便利な方法です。

trimで削除できない改行タグ・改行キーの削除方法

phpを使ってブラウザ上で見える不要な改行を見えなくする方法

余談ですが、ブログ等の記事にはブラウザに合わせて改行させているものがあります。他のブラウザでみたときに、その改行はレイアウト崩れの原因になってしまうため、不必要な改行<br>を削除したい場合があります。 HTMLの改行タグ<br>を削除します。 // 改行した文字列を変数に格納 $str = ’改行を削除して処理します。<br> ダブルクオートじゃないと改行文字は扱えません。’; // 改行タグ<br>を削除 $str = str_replace(’<br>’, ’’, $str); // 表示させるとブラウザ上のみ改行が削除される echo $str; ブラウザ表示: 改行を削除して処理します。ダブルクオートじゃないと改行文字は扱えません。 ソース表示: 改行を削除して処理します。 ダブルクオートじゃないと改行文字は扱えません。 str_replace()で改行タグ<br>を空文字に変換して削除しました。 また、ブログ記事に良くあるのですが、PCブラウザに合わせて改行をしたテキストは、スマホのブラウザ上ではレイアウトが崩れてしまいます。このような時、改行を単に見せなくするだけであれば、CSSに以下を記載する方法があります。 @media screen and (max-width: 480px) { br { display : none ; } } 上のものは、スマホの時に改行を見せなくする方法です。 スマホでもPCでも<br>タグを見せなくする場合は br { display : none ; } CSSだけでPCのブラウザでも改行を見えなくすることができます。ただし、<br> タグを見せなくしているだけなので、ソース上には<br>タグは残っています。

phpシステム上の改行文字を削除

今度はソースで書かれた改行文字 /n を削除します。 // 改行した文字列を変数に格納 $str = ’改行を削除して処理します。<br> ダブルクオートじゃないと改行文字は扱えません。’; // 改行文字を削除(ダブルクオートで囲うこと) $str = str_replace(array(”\r\n”,”\n”,”\r”), ’’, $str); // 表示させるとソース上のみ改行が削除される echo $str; // 改行した文字列を変数に格納 $str = ’システム上の改行を削除します。<br> ブラウザ上では改行されています。’; // 改行文字を削除(ダブルクオートで囲うこと) $str = str_replace(array(”\r\n”,”\n”,”\r”), ’’, $str); // 表示させるとソース上のみ改行が削除される echo $str; ブラウザ表示: システム上の改行を削除します。 ブラウザ上では改行されています。 ソース表示: システム上の改行を削除します。<br>ブラウザ上では改行されています。 ソース上の改行文字だけ削除されました。したがってブラウザ上では<br>が残っているため、改行されたままです。

ブラウザの改行タグとphpシステムの改行文字を両方削除

ソースとブラウザを同じように改行なしで表示させたい場合は、str_replace()で改行タグと改行文字を両方指定し、削除します。 // 改行した文字列を変数に格納 $str = ’明日の天気は雨です。<br> 明後日の昼頃には晴れ間が見えるでしょう。’; // 改行文字と改行タグを削除(改行文字だけダブルクオートで囲みました。) $str = str_replace(array(”\r\n”,”\n”,”\r”,’<br>’), ’’, $str); // 表示させるとブラウザとソース両方の改行が削除される echo $str; // 改行した文字列を変数に格納 $str = ’明日の天気は雨です。<br> 明後日の昼頃には晴れ間が見えるでしょう。’; // 改行文字と改行タグを削除(改行文字だけダブルクオートで囲みました。) $str = str_replace(array(”\r\n”,”\n”,”\r”,’<br>’), ’’, $str); // 表示させるとブラウザとソース両方の改行が削除される echo $str; ブラウザ表示: 明日の天気は雨です。明後日の昼頃には晴れ間が見えるでしょう。 ソース表示: 明日の天気は雨です。明後日の昼頃には晴れ間が見えるでしょう。 改行タグも改行文字も削除されたため、ソース、ブラウザ両方で改行されていません。 <br>タグは文字列として扱います。必ずダブルクオートで囲むことを忘れないよう注意しましょう。

phpで改行や空白を文字列に挿入したい場合は?

次に、改行や空白の挿入方法を見ていきます。改行は、見やすくわかりやすくしたいなどの理由で、挿入したい場合の方が多いかもしれません。 phpでは改行コードを挿入する方法がいくつかあります。この時気をつけなければならないのが、ブラウザで改行を見せるのか、ソースを改行させるのかの違いを理解することです。 ソースで改行させてもブラウザ上では改行されていなかったり、必要のない改行キーを入れてしまい、OSに反映されないなどのエラーの原因になったりします。 用途に応じて、正しいコード表記が必要です。 実際に改行を挿入する方法を見てみましょう。

ブラウザ上で改行を挿入する方法

ブラウザ上で文字列を改行させるためには、<br>タグを挿入します。これは、htmlのタグです。ブラウザ上で表示させるためには、htmlタグを使用する必要があります。 echo ’AABB’; echo ’<br>’; // xhtmlは<br /> echo ’CCCDDD’; ブラウザ表示: AABB CCCDDD <br>タグが挿入され、ブラウザで改行されて表示されています。

ソースコード上で改行を挿入する方法

ソースコード上で改行する場合は、ソースコードの改行したい箇所に改行コードを指定します。 改行コードは、WindowsやMacOS、LinuxなどのOSによって異なります。OSごとの改行コードは以下のようになっています。 Windows:CR+LF(\r\n) Mac:CR(\r) Unix/Linux:LF(\n) <!DOCTYPE html> <html> <head> <meta charset=”utf-8” /> </head> <title>改行コードあり</title> <body> <?php echo ’綺麗な花です’.”\n”; echo ’今年も咲きましたね’.”\n”; ?> </body> </html> <!DOCTYPE html> <html> <head> <meta charset=”utf-8” /> </head> <title>改行コードあり</title> <body> <?php echo ’綺麗な花です’.”\n”; echo ’今年も咲きましたね’.”\n”; ?> </body> </html> 実行結果: 綺麗な花です 今年も咲きましたね

phpを使ってブラウザとソース両方で改行する

ブラウザは改行タグ<br>、ソースでは改行文字”\n”を挿入して改行させます。 echo ’夏がそこまで’; // 改行タグ<br>と改行文字 \n を並べる echo ”<br>\n”; echo ’やってきました。’; ブラウザ表示: 夏がそこまで やってきました。 ソース表示: 夏がそこまで<br> やってきました。 改行タグ<br>と改行文字\nを並べて記述することで、ブラウザとソースの両方で改行を挿入することができます。

改行文字の前にHTML改行タグ<br>を挿入する

ソース上とブラウザ上と見せ方を同じくしたい場合、出力する時点で同時に処理することができれば簡単です。 PHPには「nl2br()」という改行文字”\n”の前に改行タグ<br>(<br />)を挿入する便利なものがあります。 これを使うことで、ソースとブラウザの両方同時に改行の要素を挿入することが可能です。 // xhtmlの改行タグ<br /> echo nl2br(”夏がそこまで\nやってきました。”); // html5の改行タグ<br>は false を設定する echo nl2br(”夏がそこまで\nやってきました。”, false); // html5の改行タグ<br>は false を設定する echo nl2br(”なつがそこまで\nやってきました。”, false); ブラウザ表示: 夏がそこまで やってきました。 ソース表示 xhtml準拠 夏がそこまで<br /> やってきました。 html5 夏がそこまで<br> やってきました。

文字間に空白を挿入

文字列の間に空白を挿入したい場合は「spacify」を使います。これは、空白だけではなく文字列を置換することもできます。 文字間にひとつずつ空白、または置換された文字列が挿入されます。 空白を入れる場合:{$var|spacify} 文字列(この場合は「_」)を置換する場合{$var|spacify:”_”} テキスト 今年も暑い夏がそこまでやってきました。 <p>{$var}</p> <p>{$var|spacify}</p> <p>{$var|spacify:”_”}</p> 実行結果: 今年も暑い夏がそこまでやってきました。 今 年 も 暑 い 夏 が そ こ ま で や っ て き ま し た 。 今_年_も_暑_い_夏_が_そ_こ_ま_で_や_っ_て_き_ま_し_た。

改行や空白の削除・挿入など見えない文字の処理をマスターすることで、見やすくわかりやすく、且つ安全な開発が可能となります。 注意点を抑えて、ぜひ覚えて使いこなしてください。