トリミング2
WordPressの場合、Mediawikiより手厚い日本語環境(マルチバイト対応)が用意されているので、トリミングなんて話題が出るとは思わなかったけど、やはりどんな仕組みでも、シングルバイトとマルチバイトの問題は発生するようだ。手厚い日本語環境の分、問題が起きた時には返って重症化するってこともある。Mediawikiの時に何が起きていたのかおさらいすると、大まかに言って、日本語は基本的に2バイトで表現されている、英数字は1バイト。ブログなどで本文の一部を表示して、残りは「続きを読む」などの表現で省略しているケースが多々ある。このサイトも、今のテーマでは実装されている。これは手動ではなく、自動的に本文をカットして一部分のみを表示する仕掛けが裏で動いといると考えてまず間違いない。その時、英数字のみの文章なら、どこをカットしても問題ないが、日本語で書かれた文章を、2バイト区切りを意識せずにカットすると、2バイトで1文字なので、その真ん中でカットしてしまうと、文字として表現できず、文字化けを起こしてしまう。そうならないように、2バイト単位でカットする関数が用意されているので、その関数を使うように変更するのが、いわゆる日本語対応。Wordpressの場合は、その辺までは既に実装されているので、これまで問題は起きなかったけど、本文中に特殊文字が含まれていた場合、その特殊文字の部分でカットされると、文字化けするというちょっと高度な問題が発生した。テーマ部分の追加実装で解決したかったけど、どうやら難しいようで、結局、Wordpress本体に手をつけた。1バイトの特殊文字を、省略表示する時だけ、2バイト文字に変換する対応で回避することができた。実装量としては、ほんの一行ほどだけど、関数の入れ子関係が複雑でちょっと解決までに時間を要した。この対策は、Wordpress本体のバージョンアップに直接影響を受けるので、今後はバージョンアップには注意が必要。出来れば、本体以外の部分で回避する仕組みを思いつきたいところではある。