見出し画像

nl2brはあるのにbr2nlは?無いなら作っちゃえ(PHP)

nl2brとはNewLine to <br>


phpでウェブプログラミングをしていると改行文字を<br>に置き換えたい時はしょっちゅうあって、それをしてくれるのがこのnl2br($KorekoreNoAtai)。
$KorekoreNoAtaiの中のに例えばFormの<textarea>なんかに記入された内容が入っているとすると、それを次のウェブページに表示する時に改行を<br>に置き換えないと表示上改行してもらえないのでこのおまじないをかけます。
to を 2にしちゃったところにPHPを考えた人のお茶目さが好きです。他のプログラミング言語では、こういうのは文字置き換えでやるしかないので、このおまじないはとてもありがたい。

でも、逆は?

逆の場合は?
JavaScriptで表示した<br>を含む部分を今度は<textarea>に入れたいとか、SQLサーバーに格納したい時、br2nlというおまじないは無いの?なんで???

無いのならば作りましょう

functionを作ります

functionはプログラムの中で何度も使うものは一つにまとめておいて、そこに投げれば処理した値を返しますよ、という仕組み。

function hogehoge($something){
    ここに何をどう処理するのかを書いて
    return $newData;
}

こんな感じで書くと$somethingが$newDataになって戻ってきます。

今回は$somethingで<br>が入った文字列を投げると改行された$newDataになって戻ってくれば良いので簡単な話。

functionに名前を付けます

目的に合ったfunction名にするとしたらやっぱりbr2nlド直球で勝負です!!

function br2nl($input){
}

<br>も<br />も対応した形にします。正規表現というやつです。
/<br\s*\/?>/という書き方です。

この正規表現の中身を説明します。

  • <br: <br> タグの開始部分を表します。

  • \s*: 0個以上の空白文字(スペース、タブ、改行など)に一致します。例えば、<br > や <br /> のように、スペースが入っている場合でも一致します。

  • \/?: スラッシュ / が0個または1個あるかどうかに一致します。これは <br> または <br /> どちらにも対応します。

  • >: タグの閉じ部分です。

そして、最後にiを付けます。このフラグは、正規表現を大文字・小文字を区別しない形でマッチさせることを指定します。つまり、<BR> や <Br> のような大文字混じりのバリエーションにも一致します。

これをPHP_EOLに置き換えます。\nではなくてPHP_EOLがおすすめ。なぜなぜ???

PHP_EOLとは

phpの置かれている環境で、End of Line=改行をするよ、というもの。
\nとの違いは、こんな感じ。

\n

  • \n は「ニューライン」を表すエスケープシーケンスで、Unix/LinuxmacOSでは改行として機能します。具体的には、文字コードとしての LF (Line Feed) を挿入します。

  • Windows では、改行には \r\n(キャリッジリターン+ラインフィード)を使用するため、PHP_EOL を使わずに \n を使用すると、Windows環境で期待通りに動作しない可能性があります。

PHP_EOL

  • PHP_EOL はPHPで定義されている定数で、現在のサーバー環境に依存した「改行コード」を表します。

    • Unix/Linux/macOS では、PHP_EOL は "\n" に相当します。

    • Windows では、PHP_EOL は "\r\n" に相当します。

つまり、\n は常に "\n" であるのに対し、PHP_EOL は実行環境に応じて異なる改行コードを返します。なので、PHP_EOLを使うとコードが異なるOSで実行された場合でも適切な改行コードを自動的に使用するため、移植性が高くなるというわけ。

$input = preg_replace('/<br\s*\/?>/i', PHP_EOL, $input);

もし、他の種類の改行マークが入っていたら、それらも統一しておきましょうか。

$input = preg_replace('/\r\n?/', PHP_EOL, $input);
  • /\r\n?/: は、以下のパターンにマッチするための正規表現です。

    • \r\n: Windows形式の改行コード(キャリッジリターン+ラインフィード)。

    • \r: Mac OSの古い形式の改行コード(キャリッジリターンのみ)。n?は\nが0回か1回現れることを意味します。

これで、\r\n(Windows形式の改行)が入っていても、\r(古いMac形式の改行)が入っていても、PHP_EOLに全て統一できます。

あとはこれらを組み合わせるだけ。

こちらが完成形

ここまでの内容を組み合わせればできるのだけれど、面倒なんでコピペしたい、という方、どう組み合わせていいのかいまいちわからないから手っ取り早くコピペしたい方、こういうプログラムノウハウ小技がもっと知りたい方、はたまたこんな私を応援したいという天使のような方まで、どうぞぜひぜひ広い心でご購入ください。
缶ジュースよりも安い100円で販売いたします。
それではどうぞーー↓↓↓↓↓

ここから先はコードのみです。

ここから先は

157字

¥ 100

この記事が気に入ったらサポートをしてみませんか?