SeoPressの文字化け対策

BuddyPressで各ページのtitle、description、keywordの設定をし、SEOを行うことができるWordPressプラグイン「SeoPress」を導入すると、文字化けが発生してしまう際の対策。

SeoPress

プラグインのソースコードを眺めていたら、データベースからデータを引っ張ってきて、表示させる際に「htmlentities()」関数を使ってHTMLエンティティに変換していました。

そのため、書き込んだ直後には正常に「title」「description」「keyword」が設定されるものの、管理画面上で再表示させた場合に文字化け状態になり、気をつけずに保存してしまうと、文字化け内容がデータベースに書き込まれてしまうと言う、非情にめんどくさい状態に。

個人的には、ユーザーに入力させるわけでもなく、管理者のみ設定する項目のため、入力時に気をつければいいこと。なので「htmlentities()」関数をかませないよう、プラグインを書換えます。

なお、このポストは2011年1月5日時点の最新バージョン「WordPress 3.0.4」「SeoPress 1.0.5」を元に解説しています。

WordPressプラグインディレクトリ >  seopress > functions.inc.php 371行目

function bp_seo_entry($lable,$meta){
$meta[0] = stripslashes(htmlentities($meta[0]));
$meta[1] = stripslashes(htmlentities($meta[1]));
$meta[2] = stripslashes(htmlentities($meta[2]));

これを以下のように書換えます。

function bp_seo_entry($lable,$meta){
$meta[0] = stripslashes($meta[0]);
$meta[1] = stripslashes($meta[1]);
$meta[2] = stripslashes($meta[2]);

本来ならば、全体をHTMLエンティティに変換させずに、適切に変換処理を行うよう設定することがベター。あと、プラグイン直接の書換えのためにバージョンアップごとに書換え処理を行わないとならないため、メンテナンス性は最悪。

まぁ、この辺の処理は英語圏以外の人には致命的だと思うため、プラグインの作者も今後改善してくれるのではないでしょうか。


追記:2011/1/14

「スタッフのブログ」さんが、より丁寧な解説、訂正方法を公開していました。また、次期バージョンで改善が期待されます!
SeoPress 1.0.5 の設定で日本語の文字化けを修正する

related story