Posted by at 2008年4月4日 金曜日

WordPress でパーマリンク構造に %postname% を含めた場合、%postname% が投稿スラッグで置き換えられる。
投稿スラッグを指定しないと、日本語タイトルを urlencode したものが %postname% として使用される。
 例: http://dogmap.jp/2008/03/25/%e6%b7%b1%e6%b3%a5%e4%b8%98%e5%a5%87%e8%ab%87/

%e6などのように特定の文字を "%" と 16 進数字 2 つを用いて変換する処理の事をパーセントエンコーディングと言い、URI の一般的構文を定めた RFC3986 にも記されている
以下、RFC3986 邦訳の抜粋。

パーセントエンコーディング{percent-encoding} メカニズムは、オクテットの対応する文字が認められた文字の範囲外にある、あるいは構成要素の中で区切り氏として使用されている場合に使用される。パーセントエンコードされたオクテットは、パーセント文字 "%" と、そのオクテットの数値を表している二桁の 16 進数字から成る三重語としてエンコードされる。例えば、"%20" は 2 進オクテット "00100000" (ABNF: %x20) についてのパーセントエンコーディングであり、US-ASCII のスペース文字 (SP) に対応している。 Section 2.4 は、パーセントエンコーディングとデコーディングが適応される時について記述している。
pct-encoded = "%" HEXDIG HEXDIG
大文字の 16 進数字 'A' から 'F' は、小文字の 'a' から 'f' とそれぞれ等価である。二つの URI のパーセントエンコードされたオクテット内で使用される 16 進数字の大文字・小文字のみが異なる場合、それらは等価である。整合性を持たせるため、URI の生成を行うもの{producers} や正規化を行うもの{normalizers} は全てのパーセントエンコーディングについて大文字の 16 進数字を使用すべきである。

このパーセントエンコーディングされた URI だが、WordPress ではすべて英小文字になっている。

確かに RFC3986 には "二つの URI のパーセントエンコードされたオクテット内で使用される 16 進数字の大文字・小文字のみが異なる場合、それらは等価である。" とあるので、どちらでも良いとは思うのだが
"整合性を持たせるため、URI の生成を行うもの{producers} や正規化を行うもの{normalizers} は全てのパーセントエンコーディングについて大文字の 16 進数字を使用すべきである。" ともあるので、すべて大文字にしたほうが良いような気がする。

そんなわけで、この問題に対応するために以下のような記述をテーマの functions.php に追加しました。

<?php
function percent_encode_capital_letter($uri) {
 $uri = preg_replace_callback('/(%[0-9a-f]{2}?)+/', create_function('$matches','return strtoupper($matches[0]);'), $uri);
 return $uri;
}

add_filter('post_link', 'percent_encode_capital_letter');
add_filter('page_link', 'percent_encode_capital_letter');
add_filter('tag_link', 'percent_encode_capital_letter');
add_filter('category_link', 'percent_encode_capital_letter');
add_filter('preview_post_link', 'percent_encode_capital_letter');
add_filter('get_the_guid', 'percent_encode_capital_letter');
?>

プラグイン化するほどでもないようなちょっとした機能を追加したいとき、functions.php は便利がいいですね。

トラックバック & ピンバック » 表示する

コメント

  • twitter 2012年3月12日 月曜日 4:27 PM

    "WordPress での日本語スラッグについて : dogmap.jp" – http://t.co/Xkipkr0N

  • twitter 2010年10月25日 月曜日 7:53 PM

    RT @wokamoto: WordPress でパーマリンクに postname を使う場合は、この対策をやっておいたほうが良いよ。 – WordPress での日本語スラッグについて : dogmap.jp http://dogmap.jp/qb

  • twitter 2010年10月25日 月曜日 7:51 PM

    RT @wokamoto: WordPress でパーマリンクに postname を使う場合は、この対策をやっておいたほうが良いよ。 – WordPress での日本語スラッグについて : dogmap.jp http://dogmap.jp/qb

  • twitter 2010年9月29日 水曜日 11:11 AM

    スラッグの日本語対策も必要になってくるんだな… – WordPress での日本語スラッグについて : dogmap.jp: http://j.mp/9weAap #miteru

  • twitter 2009年11月3日 火曜日 11:53 PM

    WordPress での日本語スラッグについて : dogmap.jp http://tinyurl.com/6zlqrg

コメントする

入力いただいたメールアドレスから Gravatar に登録されているアイコンを表示します。
(メールアドレスは公開されません)

改行と段落タグは自動で挿入されます。メールアドレスは表示されません。

:mrgreen: :-P :-D :-) ;-) :-o :-| :-( 8-O :-? 8-) :twisted: :evil: :oops: :roll: :cry: :lol: :-x more »