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),ユーザー側でできる対処としては,
といったところだろうか.
*2:http://www.sic.med.tohoku.ac.jp/~satodai/w3m-dev/200410.month/4110.htmlおよびw3m-dev 4112からのスレッド
*3:Forms in HTML documents (ja)
*5:本当はスペースに置き換えるのが正しい
*6:http://www.sic.med.tohoku.ac.jp/~satodai/w3m-dev/200410.month/4110.html,http://www.sic.med.tohoku.ac.jp/~satodai/w3m-dev/200411.month/4129.htmlあたりを参考に自己責任で.