備忘録

気になったこと、調べたこと、わからなかったことなど..

【PHP】htmlspecialcharsでの多重エンコード

事象

htmlspecialcharsで特殊文字を変換したとき、何度もhtmlspecialcharsを通すと意図しない形になった。

詳細

例:
【原文】
はちみつ&りんご

【1回目】
値   :はちみつ&りんご
画面表示:はちみつ&りんご

【2回目】
値   :はちみつ&りんご
画面表示:はちみつ&りんご

【3回目】
値   :はちみつ&りんご
画面表示:はちみつ&りんご

原因

1回目では「はちみつりんご」の&を変換。
2回目では、1回目で変換した「はちみつ&りんご」の&を変換。
3回目では2回目で変換した「はちみつ&りんご」の&を変換。

変換後の文字&も変換してしまうのでこのような現象が起きました。

解決方法

htmlspecialcharsの第四引数double_encodeに、falseを設定してあげます。 double_encodeをfalseにすると、既にあるhtml特殊文字エンコードしなくなります。

参考サイト

PHP: htmlspecialchars - Manual
第四引数double_encodeでhtmlspecialcharsの二重エスケープ防止