WordPressのタグをurlエンコード

公開
更新日
スポンサーリンク

WordPressで運用しているサイトからAddClipsを外し、手製のコードでSBMにポストするリンクをつけたらAnother HTML-lintの得点が激減した。

deliciousとtwitterにポストさせるときに、2バイト文字が含まれるのが原因だった。Another HTML-lintで必ず90点以上になるようにしていたので、エラーレベル9とかを見て頭がくらくらした。

こんなもんURLエンコードですぐだろと思ったので、URLとエントリタイトルをurlencode()で変換することに。

例えばdeliciousにポストさせるコードはこう。

<a href="http://delicious.com/post?url=http://example.com&title=タイトル"> 
 deliciousに登録する
</a> 

このサイトでは日本語URLを使っているので、WordPressタグで出力するURLとタイトルをエンコードしなければならない。なので下のようにした。

<a href="http://delicious.com/post?url=<?php
 echo urlencode( the_permalink() )
?>&title=<?php
 urlencode( the_title() )
?>"> 
 del.icio.usに登録する
</a>

ところがなぜかタイトルがURLエンコードされない。URLはちゃんとエンコードされている。

どーゆーこったと調べると、なんのことはない、the_permalink()とthe_title()で出力までやってくれるんですね。

なので、

<?php
 echo urlencode( the_permalink() );
?>

とやっても、urlencode()とechoは効いていないのでした。

それにthe_permalink()で出力されるURLは、初めからちゃんとURLエンコードされていた。当たり前か。

それに対しthe_title()はURLエンコードされずに出力されるので、&title=以下の部分が2バイト文字のまま出力され、Another HTML-lintの点数を押し下げていたのでした。

なのでthe_title()だけを値として受けとればいい。

で、調べてみたところ、the_title()には引数を3つ設定できたのでした。

第一引数がタイトルの手前に表示させる文字列。

 <h1><?php the_title("before:");?></h1>

こーなる。

 <h1>before:タイトル</h1>

第二引数がタイトルの後ろに表示させる文字列

 <h1><?php the_title( "" , ":after" );?></h1>

こーなる。

 <h1>タイトル:after</h1>

で、第三引数をfaultにすると値として受け取ることができるようになる。

<?php
 $a = the_title("","",0);
 $a = urlencode( $a );
 echo $a;
?>
 %E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB

これでようやく記事名をURLエンコードできたのでした。

最終的にはこういう感じ。

<a href="http://delicious.com/post?url=<?php
  urlencode( the_permalink() )
 ?>&title=<?php
  echo urlencode( the_title( "" , "" , 0 ) )
 ?>">
  deliciousに登録する
</a>

大したことではないんだろうけど、理由に気づかなくてものすごく時間がかかってしまった。いやあ勉強になった。

スポンサーリンク
スポンサーリンク