ショウジンブログ on Hatena

“お芝居をしないと、この社会では異邦人として扱われるほかない”

改行文字をbrに置換、そしてサニタイズする@WordPress

カスタムフィールドで用意したフィールドで、html要素はエスケープ(サニタイズして無害化)、改行は改行文字をbr要素に置換して出力したいという状況に遭ったのですが、nl2br(PHPの関数)とesc_html(WordPressの関数)の併用で簡単に出来ました。

改行文字をbrに置換 PHPのnl2br関数を使って 改行文字(\r\n, \n\r, \n and \r)をbr要素に置換して見た目の上でも改行を有効にします。

<?php
echo nl2br( $text );
?>

PHP: nl2br - Manual

これだけだと他のhtml要素(a要素等)も有効になってしまって危険なので、次項のesc_html(WordPressの関数)も併用してサニタイズ(無害化)します。

esc_htmlを使ってエンコード このesc_html関数によって「< (小ナリ)」、「> (大ナリ)」、「& (アンド)」、「” (ダブルクォーテーション)」、「’ (シングルクォーテーション)」 をエンコードします。

データ検証 - WordPress Codex 日本語版

<?php
echo nl2br( esc_html( $text ) );
?>

プラグイン「Types」を使った場合の記述例 カスタムフィールドを扱えるプラグインでは自分はTypesを好んで使っているので、その場合の記述例も一応備忘録として残しておきます。といっても該当部分(カスタムフィールドの)をesc_htmlで囲って、それをさらにnl2brで囲ってるだけですが。

<?php echo nl2br( esc_html(post_custom('wpcf-new_recruit_info')) ); ?>

いわゆる非エンジニア系のクリエータWordPressに慣れてくるとこういったサニタイズのところを考慮しないでまんまechoとかしちゃいがちですが(自分もちょっと前までそうでした)大事なところなので前述のCodexなんかも見て、覚えておくとよいですね。