[ PHP ] 改行コードと br タグを相互変換 ( nl2br / br2nl )

Pocket

PHP スクリプト内で改行コードが入った文字列を HTML の出力としてブラウザで表示しても改行コードは無視され1行で表示されてしまいます。そのため、ブラウザで改行として扱うためには BR タグに変換(または、挿入)して PHP では出力する必要があります。

スポンサーリンク

また、PHP では改行コードを BR タグに変換する nl2br 関数は存在するのですが、BR タグを改行コードに変換する関数は存在しませんので、自前で処理する必要があります。

改行コードの直前に BR タグを挿入する
$str = "line1\nline2\nline3";

// 改行の前にタグを追加する(XHTML 準拠)
// 第2パラメータは PHP 5.3.0 より追加された。
var_dump(nl2br($str, true));

// 出力
//-------------------------------------------
// string 'line1
// line2
// line3' (length=29)

// 改行の前にタグを追加する
var_dump(nl2br($str, false));

// 出力
//-------------------------------------------
// string 'line1
// line2
// line3' (length=25)
BR タグを改行コードに変換する
/*
 * BR タグを改行コードに変換する
 */
function br2nl($string)
{
    // 大文字・小文字を区別しない
    return preg_replace('/<br[[:space:]]*\/?[[:space:]]*>/i', "\n", $string);
}

$str = "abc<br>def<br />ghi<BR   /   >jkl";
var_dump(br2nl($str));

// 出力
//-------------------------------------------
// string 'abc
// def
// ghi
// jkl'

HTML では、br タグは ‘<br’ で始まる必要があります。 間にスペースが入った場合は、br タグとはブラウザで認識されなません。例え br タグと解釈されたとしてもその記述は間違いです。

なお、正規表現に関しては、『 PHP 正規表現 ( preg_match / preg_match_all) 』にまとめてありますので、よろしければご確認ください。

参考
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *