AllKeywords Plugin と日本語のキーワード

http://hxxk.jp/2005/05/11/0027

記事データ

投稿者

望月真琴

投稿日時

2005-05-11T00:27+09:00

タグ
概要

AllKeywords Plugin によるタグ付けを行う際、もし日本語のキーワードを使ったリンクアンカーが生じる可能性がある場合は、各テンプレートタグにおいて適宜 encode_url アトリビュートを指定する必要があります。

リプライ

2 件のリプライがあります。

記事本文

日本語のキーワードでタグ付けすること

タグ付けの仕組みを取り入れる際にいろいろと参考にしたのは「Technorati はどのようにしているか?」でした。 その Technorati 基準でいくならば、Tag の一覧を見る限り日本語のタグはセーフです。 一方で、タグに日本語ってどーよ?とも思ってしまうのです。 うーん。 どうしよう。 どうしよう。

現在、 AllKeywords Plugin と MT-XSearch の連携手順も一通り終わってタグ付け作業に入っているところですが、 Movable Type や weblog なんてキーワードはそのままの方が良いのですが、道路交通法なんかのキーワードは日本語のまま扱った方が良いと思い、全く悩むことなく日本語を使いまくっています。

というのも、カテゴリに日本語名を設定した場合には cat_aaaaeaaea.html みたいなファイル名になるのに対し、 MT-XSearch を使用した場合は単に検索クエリをトリガーに ReWrite するだけなので、日本語を扱うことにあまり後ろめたさを感じることがなかったことにも起因します。 ( まあ、こういった場合に「後ろめたい」なんて判断基準で選ぶのはどうかと思いますが。 )

テンプレートの記述に注意

ただし、キーワードを元に記事をリストアップするような事をしている場合 ( 要するに、 /tag/keyword のようなリンクアンカーが出来るような場合 ) はテンプレートの記述に注意が必要です。 ここでは、テンプレートにて <$MTBlogURL$>tag/<$MTAllKeyword$> といったリンクアンカーの作り方をしていると仮定します。

例えば、 Movable Type というキーワードの場合を考えてみましょう。 デリミタにスペースを用いている場合は Movable と Type というキーワードとして扱われ、それぞれ /tag/Movable/tag/Type という URI のリンクアンカーになると思います。 しかし、デリミタに , を用いている場合は、 Movable Type というキーワードとして扱われ、 /tag/Movable Type という、 URI に空白を含んだリンクアンカーになってしまいます。

空白を含んだキーワードはまだ良いとして、日本語のキーワードの場合はどうなるか。 更に、ブログというキーワードの場合を考えてみましょう。 すると、リンクアンカーは /tag/ブログ といった日本語を含む URI になります。

日本語を含む URI がいけない理由は RFC 2396 を参照していただくと良いでしょう。 すごく簡潔に言うと、 ASCII文字コード表のうちの 0x20 〜 0x7e の範囲の文字しか使ってはいけない、それ以外の文字はエスケープして用いよということです。

よって、ブログという日本語キーワードを元に /tag/%A5%D6%A5%ED%A5%B0 というリンクアンカーを作成すれば問題は解決されます。

encode_url アトリビュートを指定する

では、実際のテンプレートはどう書けば良いのか。 encode_url アトリビュートを指定することで日本語キーワードを用いてもエスケープできるようになります。

<$MTBlogURL$>tag/<$MTAllKeyword$> というリンクアンカーの作り方の場合、 <$MTBlogURL$>tag/<$MTAllKeyword encode_url="1"$> と変更することにより、日本語キーワードを用いたリンクアンカーも問題無く利用できるようになります。

トラックバック送信先

リプライ

2 件のリプライが送られています。

2005-05-12T04:30+09:00 - (o)

URL encodingはエンコード前のcharsetに依存します。 PublishCharsetがEUC-JPやShift_JISの場合、&lt;$MTAllKeyword encode_url="1"$&gt;をmt-xsearchなどで使用している分にはそのcharsetで処理が行われるので問題ありません。しかし、その文字列をTechnoratiなどに渡すと正しく解釈されません。つまり、TechnoratiなどにはUTF-8の文字列をURL encodingしたものを渡す必要があります。 ちなみに拙作のMT-I18Nプラグインを使うと、以下のように書けばUTF-8にコンバートした後URL encodingしてくれます。 &lt;MTEncodeText from="euc-jp" to="utf-8" encode_url="1"&gt; &lt;$MTAllKeyword$&gt; &lt;/MTEncodeText&gt;

2005-05-16T22:18+09:00 - 真琴

なるほど、他所に渡す場合……。私の場合は EUC-JP なので、気に留めておく必要がありますね。エントリに書き加えておきます。 <a href="http://as-is.net/blog/archives/000900.html">http://as-is.net/blog/archives/000900.html</a> ( 書き加えるまでここにメモ )

この記事に対するご意見やご質問、ご感想などありましたらこのフォームに簡潔に記入して下さい。 簡潔に記入できない場合や、関連記事にてご意見をお寄せいただく場合は、ご自身の weblog にて記事を書かれた上で あてにトラックバックとして送信してください。

記入フォーム

補足情報

著作、講演、制作実績など