hiddenタグのvalueに入れた値は、ブラウザでunescapeされる

これ知らなくてかなりはまった。hiddenのvalueにセットしたデータがタグと改行コードをエスケープしたデータで、それをPOSTすると、サーバで取得したhiddenの値も当然エスケープされた値そのままかと思っていたが、実はエスケープされている文字は、valueの中ではブラウザが勝手にunescapeしてる。具体的には以下。

name=test value="<br&gt"
としてPOSTすると、サーバ側では
testには<br>という値が入る。

※表示の関係で&は全角にしていますが、実際は半角英語です。

&lt;br&gtだと思って、改行タグを改行コードに変換する関数に通したら、何故かその値も改行コードに変換されてしまって、おかしいなぁと思って気づいた。データは<br>で取得されるため、改行コード変換対象になっていた。調べたところ、hiddenに限らずvalueに入れた値はブラウザが勝手に変換しているとのこと。

今回は、hiddenのvalueには改行タグ変換はせず、タグエスケープした値を入れ、POSTした先の本登録処理の際に、タグエスケープと改行タグ変換をしてDB登録を行うことにした。
ちなみに、Mixiの処理を見ると、クォートとダブルクォートをエスケープし、改行コードはそのままの値をhiddenのvalueに入れている。