2006年12月12日
さて、前回の続きですが...
直す方法を見つけました!!
※2006.12.13 WordPressのユーザフォーラムにて指摘を受けました。
この方法MySQLが4.0x下での対応方法のひとつです。
もう一度、前回のおさらい
内部コードがEUC-JPのレンタルサーバにて、WordPressをUTF-8で扱いたい場合の対処方法をいろいろなサイトや掲示板を参考にして自分なりに直してみました。
どうしてもGoogle MapsやAmazonを使ってみたかったので...
原因は内部文字コードがEUC-JPであること。
私のサイトはCPIでPHPは標準で4.4.1です。
MySQLは4.0と5.0が使えるます。
ただMySQLの4.xだとphpMyAdminからclient_charsetにはUTF-8を指定できませんでした。
MySQL5.0だとUTF-8を指定できるのですが、WordPress自体エラーを頻発します。
そのため、MySQL4.xで続けることにしました。
なお、WordPressはMEの2.0.5です。
ここまでが、前回の条件でした。
※上記でMySQL5.0でエラーが起きるようなことを書きましたが、あくまでも私の調べた状況下での結果です。
すべてにおいて起こるわけではありません。
それで、前回はwp-includes/wp-db.phpに無理矢理、UTF-8に変換する部分を付け加えました。
【問題提起】
この方法では、実は解決に至りません。
以下のような問題が残っているのです。
- [表示]-[テーマエディタ]などのデータベースではなく、ファイルを編集するページでは対応不可能。
- プラグインによっては、対応できない。
(「seo-title-tag」プラグインでは文字化けした)
といったところです。
となると、wp-includes/wp-db.phpは一時的なものになります。
可能性から考えると、POSTされた値をUTF-8として扱わなければならないわけです。
各ソースを調べると...すべてPOSTされた値を直接使っていました。
そのため、すべてに文字コード変換を入れることは無理。
しかも、新しいプラグインやテーマを適用させた時には、それらにも対応させなければなりません。
このままでは、直すことは困難です。
でも、直す方法を見つけました。
まず、前回いじった wp-includes/wp-db.php は元のソースに戻します。
そのまま残しておくとバグの元となるので。
次にすべてのページで使われるファイルをターゲットにします。
それは「wp-config.php」です。
前回も wp-config.php をなおしたのですが、もう一度 見直します。
前回なおしたのは
【オリジナル】
mb_language("Japanese");
mb_internal_encoding("UTF-8");>【編集後】
ini_set("output_buffering","on"); //2006.12.09 add
ini_set("mbstring.encoding_translation","off"); //2006.12.09 add
ini_set("output_handler","mb_output_handler"); //2006.12.09 add
ini_set("default_charset","UTF-8"); //2006.12.09 add
mb_language("Japanese");
mb_internal_encoding("EUC-JP");
ini_set("mbstring.http_output","UTF-8"); //2006.12.09 add
ini_set("mbstring.http_input","auto"); //2006.12.09 add
ini_set("mbstring.substitute_character","none"); //2006.12.09 addこのあとに核心部分を追加します。// If the output-encoding is different than the internal-encoding,
// It converts the character-code of POST value into output-encoding.
// 2006.12.12 add
if (
function_exists("mb_http_output")
&& function_exists("mb_internal_encoding")
&& function_exists("mb_convert_variables")
) {
mb_convert_variables (
((mb_http_output() != 'pass') ? mb_http_output() : mb_internal_encoding()),
"ASCII,JIS,EUC-JP,eucJP-win,UTF-8,SJIS,SJIS-win",
$_POST
);
}まぁ、関数の有無のチェックはこれ以前にすべきでしょうが...
mb_convert_variablesを使い、$_POSTグローバル変数を置換してしまいます。
これでOK。問題となるファイルの編集も、seo-title-tagプラグインにも対応することができました。
たぶん、完璧です。これなら、もしmbstring.http_outputをEUC-JPに戻したとしても、対応できると思います。(と、本人は思っている)
それと、テーマ「Blix」を参考にしたテーマ「BeLive」ですが、問題があったようで「WP-SimpleGMaps」プラグインをそのまま使うと、サイトへの接続が切れてページを表示できませんでした。
理由が footer.php 内の do_action('wp_footer') の位置に問題があったようです。
これも直したら解決です。
この記事へのトラックバック
この記事へのコメント
近藤さんのソース、役に立ってます。本当に有り難うございます。
実は、日本語キーワードで記事の検索を行おうとすると、記事があるはずなのに検索結果が表示されず、検索キーワードも文字化けを起こします。そのような現象は見られませんでしたか?私もCPIを使用しています。私も現在調査中です。
>古い記事へのコメントで申し訳ありません。
そんなことありません。コメントをいただけるだけでもうれしいです。
こんなソースでお役に立てるのであれば
>実は、日本語キーワードで記事の検索を行おうとすると、
>記事があるはずなのに検索結果が表示されず、
>検索キーワードも文字化けを起こします。
>そのような現象は見られませんでしたか?
>私もCPIを使用しています。私も現在調査中です
実は、私も「カテゴリ」や「タグ」「サイトマップ」で日本語を使うとおきてしまうことが有り、対処策を検討しました。
たぶん、「CPIだから起こる」ワケではないと思います。
調査中で、SELECT文を調整すればいけそうなところまではわかっているのですが、上手くいかず。
結局、そのままにしています。
私ももう少し調査をしていきたいと思っています。
そのうち、お互いの情報を交換致しましょう。
私もCPIを利用する際にDBの文字コードに悩まされ、こちらの対処方法を実行させて頂いたことがありました。
しかしながら所々、文字化け等の問題が出てきて、ご提供の対処方法では結果として上手く行きませんでした。
ただどうしても実装しなくてはならなかったもので、他の方法で上手くいっているのでご報告します。
方法は、
php.iniで文字コードを変換し、設定するだけです。
WPはデフォルトのままでUTF8に設定するだけでOKです。
phpMyadminの動作がちょっと怪しい気がしますが運営上では特に問題なく動いています。
方法としてはCPIからすると「非推進」なのでしょうが、WPのバージョンアップ版ではutf8のみの仕様となっているので、現時点ではこの方法がシンプルかもしれません。
EUC-jp版の対応もWPからアナウンスされるみたいですけど・・・・
コメントありがとうございます。
私もこの方法がベストであると思っていません。
いろいろと試してみる必要があると思っています。
WPもME2.1.x系はEUC-JP対応されているようですが、ME2.2系は現状ではUTF-8対応のみですからね。
CPIもせめてMySQL5だけでも、データベースのUTF-8指定が許されれば...
今度、通りすがりさんの方法も試してみたいと思います。
情報ありがとうございます。
これからも意見交換してください。
そもそもWPを採用した経緯って、某会社のブログサービス(pro版)を利用できなくなった事とMTの場合ライセンスの関係がある為の苦肉の策なんでしょうけど・・・・
セキュリティーの強化はいいですが、DOM系との連鎖(ajaxとか)、将来的なUTF-8の利用率や他国語化等を考えればもう少し早い対応をして頂きたいものです。
サポート等も含めていい鯖なんで。還元率も?(笑)
ではでは。
ありがとうございます。
文字化け直ってよかったですね。
しかし、もっとよい方法は下記を参考にしてください。
【技術メモ】WordPressをUTF-8でインストールする(最終解決編)
http://blog.belive.jp/archives/50979683.html
[WordPress]CPIのサーバでUTF-8で設定する方法
http://belive.jp/archives/utf8_with_cpi/
以下のように文字化けするのですが?
どうすればいいのでしょうか?
繧オ繝シ繝舌�縺ョ PHP 繝舌�繧ク繝ァ繝ウ縺ッ 5.1.6 縺ァ縺吶′ WordPress 3.2.1 縺ッ 5.2.4 莉・荳翫�縺ソ縺ァ縺泌茜逕ィ縺ォ縺ェ繧後∪縺吶
一度ブラウザ側で文字コードを変更してみてはいかがでしょうか?
UTF-8ではなく、Shift-JISかEUC-JPでインストールされたように思います。
また、お使いのレンタルサーバではWordPress 3.2.1は利用できないと思います。
WordPress 3.2.x以降は PHP 5.2.4が必要ですが、レンタルサーバによってはPHPのバージョンが追いついていないところがあります。
そのため、当面はWordPressも 3.1.xを利用するしかないと思います。
> WordPressをインストールしたら・・・
> 以下のように文字化けするのですが?
> どうすればいいのでしょうか?
>
>
> 繧オ繝シ繝舌�縺ョ PHP 繝舌�繧ク繝ァ繝ウ縺ッ 5.1.6 縺ァ縺吶′ WordPress 3.2.1 縺ッ 5.2.4 莉・荳翫�縺ソ縺ァ縺泌茜逕ィ縺ォ縺ェ繧後∪縺吶