EUC-JP や Shift_JIS を使わなければならなかったとき、ハマッた。
EUC-JP や Shift_JIS (両方とも、Windows標準キャラクタセットが扱える CP51932、SJIS-win を含む)の場合、これらの文字セットに存在しない
ⓒ
などをPOSTすると、数値文字参照形式でPOSTされる。
なので、POSTされた値を htmlspecialchars() や htmlentities() を通して
echo htmlspecialchars(POST値, ENT_QUOTES, 文字エンコーディング); echo htmlentities(POST値, ENT_QUOTES, 文字エンコーディング);
とすると、数値文字参照の「&」が「&」に変換され、数値文字参照の値がそのまま表示される。
これは、両関数の第4引数「double_encode」のデフォルトが「true」のため。
■PHPマニュアル htmlspecialchars()
http://www.php.net/manual/ja/function.htmlspecialchars.php
■PHPマニュアル htmlentities()
http://www.php.net/manual/ja/function.htmlentities.php
回避策は、この第4引数「double_encode」を「false」にしてやればいい。
こんな感じ。
echo htmlspecialchars(POST値, ENT_QUOTES, 文字エンコーディング, false); echo htmlentities(POST値, ENT_QUOTES, 文字エンコーディング, false);
0 件のコメント:
コメントを投稿