これ知らなくてかなりはまった。hiddenのvalueにセットしたデータがタグと改行コードをエスケープしたデータで、それをPOSTすると、サーバで取得したhiddenの値も当然エスケープされた値そのままかと思っていたが、実はエスケープされている文字は、valueの中ではブラウザが勝手にunescapeしてる。具体的には以下。 name=test value="&lt;br&gt" としてPOSTすると、サーバ側では testには<br>という値が入る。 ※表示の関係で&は全角にしていますが、実際は半角英語です。 &lt;br&gtだと思って、改行タグを改行コードに変換する関数に通したら、何故かその値も改行コードに変換されてしまって、おかしいなぁと思って気づいた。データは<br>で取得されるため、改行コード変換対象になっていた。調べたところ、hiddenに限らずvalueに入れた値はブラウザ