このブログでは広告を表示するのにWPAdsプラグインを利用しています。このプラグインは重み付けによって複数の広告を切り替えて表示する機能など非常に便利なものですが、広告の「Description」や「HTML Code」に日本語を入れると文字化けしてしまう問題があります。
今日はちょっと時間があったので文字化けの原因について調べてみました。
日本語の文字を含んだ広告を作成してWPAdsのデータベースを直接見てみたところ正常に保存されているようなので、原因は管理ページの表示部分にあると予想して wpads-options.php を見たところ、以下のようなコードになっていました。
<tr> <td valign="top">Description</td> <td> <input name="banner_description" type="text" size="50" value="<?php echo htmlentities($banner->banner_description);?>" /><br /> Any text that helps you identify this banner </td> </tr> <tr> <td valign="top">HTML Code</td> <td> <textarea name="banner_html" rows="6" cols="80"><?php echo htmlentities($banner->banner_html);?></textarea><br /> Copy and paste the HTML code to show the ad (for example, the Google AdSense code) </td> </tr>
どうもhtmlentities()によるエスケープ処理で日本語が化けてしまっているようです。htmlentities() は文字コードを省略されると ISO-8859-1 として処理されるようなので、正しく処理するように ‘UTF-8’ を渡します。(ついでに XSS の問題がありそうなので ENT_QUOTES オプションを追加。)
修正後のソースは以下のようになります
<tr> <td valign="top">Description</td> <td> <input name="banner_description" type="text" size="50" value="<?php echo htmlentities($banner->banner_description, ENT_QUOTES, 'UTF-8');?>" /><br /> Any text that helps you identify this banner </td> </tr> <tr> <td valign="top">HTML Code</td> <td> <textarea name="banner_html" rows="6" cols="80"><?php echo htmlentities($banner->banner_html, ENT_QUOTES, 'UTF-8');?></textarea><br /> Copy and paste the HTML code to show the ad (for example, the Google AdSense code) </td> </tr>
patch: wpads-utf8.patch
[…] バナー広告を管理して表示するためのプラグインです。日本語表示対応は こちら を参照。 […]
[…] WordPressのwpadsプラグインで日本語を使用するには | bluegold […]
[…] 文字化けのバグがあるので基本的には半角英数の方が良いかもしれません、文字化け対策が下記のサイト様が修正されているようです。※WordPressのwpadsプラグインで日本語を使用するには […]
[…] 画面のソースコード入力欄に日本語のaltを入力できません。 (2008/12/24追記:日本語の文字化け回避策が WordPressのwpadsプラグインで日本語を使用するには | bluegold に紹介されています。) […]
[…] » WordPressのwpadsプラグインで日本語を使用するには AD:レゴ クリエイター カフェコーナー 10182posted with amazlet at 09.12.25レゴ (2008-07-12)売り上げランキング: 4561Amazon.co.jp で詳細を […]
[…] 参考記事:bluegold […]
[…] 一応、日本語が化ける問題は、 http://blog.bluegold.me/2008/12/wordpress-wpads-japanese-utf8/ ↑を参考にさせて貰って、軽く解消b で、使ってるテーマの footer.php に […]