meta descriptionの出力の際に、「phpのTrim関数で消えない半角スペース」があって、ハマったのでご紹介します。
そもそもTrim関数というのは、文字列の両端の通常の半角スペース(0x20)、タブ(0x09)、リターン(0x0A)、改行(0x0D)、NULバイト(0x00)、垂直タブ(0x0B)を消してくれる関数なのですが、「WordPress SEO対策 All in One SEO Packのdescription出力の改造」の際に、いくらやってもTrim関数で両端の半角スペースが消えてくれません。最初は、わたしのコーディングミスと思っていろいろやってたのですが、よくわかりません。
そこで、その半角スペースをbin2hexで16進数に変換にしたところ・・・
「C2A0」
と出て来ました。あれれ? 「20」じゃないの?
どうやら、文字コードC2A0とは、「UTF-8の半角スペース」というか、HTMLでいう「 」スペースのバイナリで、「そこでは改行しないスペース」という意味をもった、通常の半角スペース(20)とは全く別のスペースのようです。
このスペースが何かしらのpluginに含まれて出力されていて、これがTrim関数で消えなかったという、わかってしまえば何だよという内容でした。
$description = str_replace( "\xc2\xa0", " ", $description ); $description = trim( preg_replace( '/[\n\r\t ]+/', ' ', $description), ' ' );
文字コードC2A0を通常の半角スペース(20)に置換してしまえば、OKでした。
もし、「文字コードC2A0」がfloatしている箇所で出力されていたら、cssで横並びのレイアウトが段落ちしたりするかもです。htmlソースを見ただけでは、発見しにくいのですが、皆さんもお気をつけください。
参考サイト
http://blog.livedoor.jp/qoozy/archives/52452315.html
http://blog.fenrir-inc.com/jp/2011/06/post_51.html
$description = mb_convert_kana($description,'sKV','UTF-8'); $description = mb_substr( $description, 0, 120, 'UTF-8' ); $_find_pos = mb_strrpos($description,'。',0,'UTF-8');