【wordpress】プラグイン「advanced make clickable」で日本語URLをリンクすると変になることがある

スポンサーリンク

いつもはwordpressの記事のURLは英語にしているのですが、最近ちょっとめんどくさい時は日本語にしていました。日本語で記事のタイトルを打つと、そのまま日本語のURLになるので。

今までは特に問題なかったですが、昨日ブログを書いていて日本語URLをリンクしようとするとむちゃくちゃな表記になってました。
元のHTMLは

<a href="http://www.limemo.net/blog/2012/01/d-tr1%e3%81%ab%e6%8e%a5%e7%b6%9a%e3%81%97%e3%81%9f%e3%83%8f%e3%83%bc%e3%83%89%e3%83%87%e3%82%a3%e3%82%b9%e3%82%af%e3%81%8c%e5%a3%8a%e3%82%8c%e3%81%be%e3%81%97%e3%81%9f-%e3%81%9d%e3%81%ae1.html">D-TR1に接続したハードディスクが壊れました その1 | Linuxとかをつついてみるブログ</a>

と正しくエンコードされているんですが、記事をプレビューすると

のように壊滅状態になります。

原因を調べて行くと、プラグイン「advanced make clickable」を有効にしていないwordpressだと上のように壊滅せず、日本語URLでも正しくリンクできました。どうも「advanced make clickable」が原因のようなのです。検索すると以下のブログがあり、
WordPress Advanced make Clickableプラグイン 不具合修正 – 130単位
こちらを参考にプラグイン本体のadv_make_clickable.phpを修正してみました。

            $replaced_ht_names[$tag] = "%" . $tag . $index . "%";
            $content = str_replace($match, $replaced_ht_names[$tag], $content);
         }
      }      
   }

   $content = preg_replace('/([^\"\'=>])(https?:\/\/|ftp:\/\/|mailto:)/i', '$1 $2', $content);
   $content = find_url($content);

   foreach($store_h as $tag => $store) {
      foreach($store as $index => $match){
         $replaced_name = "%" . $tag . $index . "%";
            $replaced_ht_names[$tag] = "%%" . $tag . $index . "%%";
            $content = str_replace($match, $replaced_ht_names[$tag], $content);
         }
      }      
   }

   $content = preg_replace('/([^\"\'=>])(https?:\/\/|ftp:\/\/|mailto:)/i', '$1 $2', $content);
   $content = find_url($content);

   foreach($store_h as $tag => $store) {
      foreach($store as $index => $match){
         $replaced_name = "%%" . $tag . $index . "%%";

43行目と54行目の%を増やせば良いようです。自分の記事は対処法をまとめただけですが、参考にさせてもらったWordPress Advanced make Clickableプラグイン 不具合修正 – 130単位さんのブログだと発生条件なども分析した上で修正しているので、PHPや文字エンコードの勉強にもなると思います。

wordpressのバージョン3.2.1、advanced make clickableのバージョン1.3.2J上で上の修正を行なうと、日本語URLでも正しくリンクできるようになりました。