このエントリーをはてなブックマークに追加 Twitterでツイート 見出しの<や>は、変換しないとね

久しぶりに自社サイトについてHTMLバリデーションしてみたら、ちょっと悲しい状況になっていたので、テーマや投稿データを修正しましたorz

今回HTMLバリデーションでひっかかったのが、見出しに<や>が含まれるケースでした。一般的なブログの場合、見出しに<や>が含まれることはほとんどないと思いますが、PHPなどのプログラムネタがあったりすると、そんな見出しになることもあるのではないでしょうか(ホントにまれだとは思いますが^^;)。

WordPressの投稿記事を表示する方法はいくつかあるわけですが、the_title関数を使うケースが多いと思います。

the_title();

the_title関数の第3パラメータは、見出しテキストを出力(echo)するかの指定でデフォルト(省略時)は見出しテキストを出力するとなっていて、このままだと<や>をそのまま出力することになり、HTMLバリデーションに引っかかることになるわけです。

この問題の対処方法としては、the_title関数では出力を行わずに、<や>を変換してから出力するというものです。

echo ereg_replace('<', '&lt;', ereg_replace('>', '&gt;', the_title('', '', false)));

雰囲気的にはhtmlspecialchars関数で変換したいところですが、そうすると&が二重に変換されてしまうので、ereg_replace関数などで個別に変換する必要があるようです。

またこの問題は、カレンダーの表示部分にも影響してきます。WordPressが標準で提供するカレンダー(get_calendar関数)では、投稿日のリンク記述(AタグのTITLE属性)に見出しテキストを出力しています。カレンダーを利用している場合は、この出力部分も修正する必要があるわけです。修正部分は、次の赤字部分。

if ( in_array($day, $daywithpost) ) // any posts today?
	echo '<a href="'.get_permalink($ak_titles_for_day[$day]['id']).'" title="'.ereg_replace('<', '&lt;', ereg_replace('>', '&gt;', $ak_titles_for_day[$day]['title'])).'"><span>'.$day.'</span></a>';
else
	echo '<span>'.$day.'</span>';

ほとんどのブラウザでは問題なく表示できので、絶対にやらなきゃいけない対応とはいえないかもしれないんですけどね。。。

投稿日:2009年10月19日
  • ※コメントは、スパム対策などのためIPアドレスにて制限しております。
  • ※誹謗や中傷、スパムなど、不適切な内容は公開いたしません。ご了承ください。