2006-05-26
_ Ajax を使った tDiary のプレビュー表示プラグイン(2)
category_to_tag で表示されるタグ少し見やすくを書いてる途中に,プレビュー表示を見ていたら,どうも本文中にセミコロン (;) が入っていると,そこでとぎれてしまうようです.
んー,テスト不足だったな.とりあえず, livehttpheader で送信されている POST 要求をキャプチャ.プレビュー表示プラグインではセミコロンが encode されずにそのまま送信されているけど,通常のプレビューボタンを用いた場合は,セミコロンも encode されている.
調べてみると,フォームの区切り文字に「&」の代用として「;」をサポートすることが推奨されている (via:Namazu-devel-ja 676] URI属性値のセミコロン記号) ようで,このためセミコロンをそのまま送信すると,そこで本文が区切られてしまっていたのが原因でした.
で,Javascript には URI エンコードを行うメソッドとして,escape(),encodeURI(),encodeURIComponent() の 3 種類があり,それぞれエンコード対象の文字列が異なるようです.(escape() は古いメソッドでおすすめできないらしい)
PHP と JS の URI エンコード比較に,このあたりのことが詳しくかかれていて参考になりました.結局,Javascript でセミコロンを URI エンコードしたい場合は,これまで encodeURI() を使っていたのですが,必要に応じて encodeURIComponent() を使う必要があるみたいです.
というわけで,この部分を修正したのでご利用の方は入れ替えをお願いします.
- realtime-preview.rb(タグ生成プラグイン共存版)
- realtime-preview-with-xmlhttprequest.rb(単体動作版)
これでセミコロンが本文中に入っていても大丈夫なはず.