w3mでプレビュー後更新すると改行が失われる

今日はテキストブラウザw3m*1でダイアリーを更新した.「確認する」で問題なさそうなことを確認して,「この内容を登録する」をクリックすると……何だかおかしい.記法が生で文中に表示されてしまっているし,段落も分かれていない.編集画面を開くと,全てが一行になってしまっていた.
まず,確認用画面のソースをFirefoxと比較すると,特に違いはなさそう.しかし,サーバにPOSTされるデータを見てみると,Firefoxではbody=で渡される日記本文の中に %0D%0A(改行コード)が含まれているのに対して,w3mの場合は該当する部分に改行コードがない.
検索してみると,これはmixiでも問題になっているようで,いくつか情報が見つかった.これはw3mの仕様らしい*2
まず,input要素のvalue属性は CDATA である*3.CDATA なので改行文字を使用すること自体は問題ない(invalidなhtmlではない).しかし,ブラウザはLFを無視し,CRを1個のスペースに置き換えることになっている*4.従って,改行を取り除いているw3mの挙動は間違いではなく*5,改行がそのまま保持されることを期待しているはてなダイアリー側が間違っていると言えるだろう.

はてなアイデアに登録したが(idea:10732),ユーザー側でできる対処としては,

  • w3mではプレビューしない
  • w3mにpatchをあてる*6

といったところだろうか.