[PHP] 文字をエスケープする

プログラムでHTMLをそのまま出力すると、脆弱性を生んでしまうことがあります。入力フォームなどからインプットされたデータを表示するには、エスケープ処理をして特殊文字を無効化する必要があります。

echo '<script>alert("危ない");</script>';

無効化するには htmlspecialchars を利用します。

$escape = htmlspecialchars('<script>alert("危ない");</script>', ENT_QUOTES|ENT_HTML5, "UTF-8");
&lt;script&gt;alert(&quot;危ない&quot;);&lt;/script&gt;

元の文字に戻すには、htmlspecialchars_decode を利用します。

$html = htmlspecialchars_decode($escape);
<script>alert("危ない");</script>';

各種フレームワークでは用意されていることが多いですが、htmlspecialchars は関数化して利用すると良いでしょう。

echo h('<script>alert("危ない");</script>');

function h($h) {
    return htmlspecialchars($h, ENT_QUOTES|ENT_HTML5, "UTF-8");
}

PHPPHP

Posted by kidatti