0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

htmlspecialchars関数についてのメモ

Last updated at Posted at 2020-02-10

###htmlspecialchars関数とは

・HTMLの特殊タグをエスケープ(変換)する関数。
ユーザーからの入力を受け取る際、XSS等悪意のあるスクリプト挿入などの攻撃を避ける。

例) & → '&amp;'    < → '&lt;'    > → '&gt;'    " → '&quot;' ENT_NOQUOTEを設定していない時    ' → '&#039;' ENT_QUOTES設定時

qiita.php
<?php 
$sample = htmlspecialchars("<script>window.location='http://yahooooooooo.coooo.jp';</script>", ENT_QUOTES, 'utf-8');
echo $sample;
//&lt;script&gt;window.location=&#039;http://yahooooooooo.coooo.jp&#039;;&lt;/script&gt; 
//ブラウザ上で右クリックでページのソースを表示するとエスケープされているのがわかる。
?>

・htnlspecialcharsを使用するタイミングはDBの内容を画面に呼び出す直前にする。
・DBに保存するタイミングで使用すると変換された文字列がDBに保存されてしまい、DBの内容を「HTMLへ出力する」以外の用途に使う場合に支障が出る可能性がある。

####打つのが面倒なので関数化

qiita.php
<?php 
function h($str){
    echo htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}

$sample = h("<script>window.location='http://yahooooooooo.coooo.jp';</script>");
echo $sample;
//&lt;script&gt;window.location=&#039;http://yahooooooooo.coooo.jp&#039;;&lt;/script&gt; 
?>

#####入力フォーム等改行がある入力を受け取る場合

qiita.php
function hbr($str){
    echo nl2br(h($str));
}

を追加してみた。

関数化の際、echoかreturnのどちらが適しているのかが気になっている点です。ご指摘ありましたらお願いいたします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?