モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

hiddenタグのvalueに入れた値のHTML特殊文字エスケープについて

フォームの確認画面などで、入力内容のタグ「<script>」とかを「<script>」のように特殊文字エスケープしてからhiddenのvalueに突っ込んでいても、渡されてくる値は再度アンエスケープされた「<script>」が渡されてきていました。
調べてみると、ブラウザ側でvalueに入っているものは、アンエスケープして渡すという仕様になっているようでした。


hiddenタグのvalueに入れた値は、ブラウザでunescapeされる - サラリーマンから起業するリアル
http://d.hatena.ne.jp/ichikaway/20070515/1179235211


とある理由で「<br>」タグだけは改行コードにしてから渡したかったので、一旦javascriptで変換してから渡そうとしたのですが、そうすると今度は全くアンエスケープされずに渡るようになってしまいました。


デバッガで見てみると、submitで渡す時点で変換が掛かるわけではなく、value属性で渡されたものからDOMを構築する時点でアンエスケープされるため、javascriptで後からvalueに突っ込むとアンエスケープが掛からないのでこのような動作になるようです。


既存の動きとの変化を少なくすることを考えると、一旦valueのところに入れてアンエスケープの変換が掛かった後、その値を使ってさらにbrタグを変換するか、CGI側で先に変換を掛けておくかするのが良い感じでした。