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(単体動作版)
これでセミコロンが本文中に入っていても大丈夫なはず.
2006-05-25
_ category_to_tag で表示されるタグ少し見やすく

category_to_tag で表示されるタグは,スペース区切りで表示されるわけですが,なんとなーく見にくい感じがする.スタイルシートである程度スペースをとったりをとるってのも手ですが,content プロパティと :before 擬似要素を利用して,カンマ区切りになんかしてみた.残念ながら IE はこれに対応していないので表示されないのですが,Firefox や Safari なんかでは表示されます.
/* category_to_tag */
div.tags a+a:before {
content: ", ";
color: #000;
}
すべてのブラウザに対応させるのであれば,category_to_tag.rb を直接書き換えてしまえばいいだけなのですが,スタイルシートだけでもなんとかできるよということで.
_ chu-ken [修正版リリースありがとうございます。 今度はきちんと表示されるようになりました。]
_ hb [コメントありがとうございます. 無事表示されたようでよかったです.]