2006年12月12日

mixiチェック

さて、前回の続きですが...

直す方法を見つけました!!

※2006.12.13 WordPressのユーザフォーラムにて指摘を受けました。
  この方法MySQLが4.0x下での対応方法のひとつです。

BeLive ホームページ作成中

 

 

 

 

もう一度、前回のおさらい

内部コードが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に変換する部分を付け加えました。

【問題提起】
この方法では、実は解決に至りません。
以下のような問題が残っているのです。

  1. [表示]-[テーマエディタ]などのデータベースではなく、ファイルを編集するページでは対応不可能。
  2. プラグインによっては、対応できない。
    (「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') の位置に問題があったようです。
これも直したら解決です。



(19:35)

この記事へのトラックバック

1. CPIでWordpress ME2.2が文字化けする  [ 我流天性 - がらくた屋 ]   2007年06月14日 16:42
個人サイトで借りてるレンタルサーバーCPIに Wordpress ME2.2をインストールしたら文字化けして、半日近くハマったので解決方法をメモしておきます。 原因はたぶん下の3点の絡み。 CPIの...
2. 【技術メモ】WordPressをUTF-8でインストールする(最終解決編)  [ びぃらいぶの記録 ]   2007年07月24日 02:15
CPIでWordPressを利用しようとしたとき、どうしても初期設定ではEUC-JPしか使えない。以前、無理矢理UTF-8で動かすことを試みたがあまりにも無茶過ぎた。 今回は、もっとスマートかつ今後のバージョンアップ等にも対応できる方法を見つけることができた。

この記事へのコメント

1. Posted by Katayamaと申します。   2007年03月28日 15:09
古い記事へのコメントで申し訳ありません。
近藤さんのソース、役に立ってます。本当に有り難うございます。
実は、日本語キーワードで記事の検索を行おうとすると、記事があるはずなのに検索結果が表示されず、検索キーワードも文字化けを起こします。そのような現象は見られませんでしたか?私もCPIを使用しています。私も現在調査中です。

2. Posted by MOO@BeLive   2007年03月28日 15:39
Katayamaさん

>古い記事へのコメントで申し訳ありません。

そんなことありません。コメントをいただけるだけでもうれしいです。
こんなソースでお役に立てるのであれば

>実は、日本語キーワードで記事の検索を行おうとすると、
>記事があるはずなのに検索結果が表示されず、
>検索キーワードも文字化けを起こします。
>そのような現象は見られませんでしたか?
>私もCPIを使用しています。私も現在調査中です

実は、私も「カテゴリ」や「タグ」「サイトマップ」で日本語を使うとおきてしまうことが有り、対処策を検討しました。
たぶん、「CPIだから起こる」ワケではないと思います。

調査中で、SELECT文を調整すればいけそうなところまではわかっているのですが、上手くいかず。
結局、そのままにしています。
私ももう少し調査をしていきたいと思っています。
そのうち、お互いの情報を交換致しましょう。
3. Posted by 通りすがり   2007年06月03日 04:29
上記のコメントのやり取りについて気になったのでコメントさせて頂きます。

私もCPIを利用する際にDBの文字コードに悩まされ、こちらの対処方法を実行させて頂いたことがありました。

しかしながら所々、文字化け等の問題が出てきて、ご提供の対処方法では結果として上手く行きませんでした。

ただどうしても実装しなくてはならなかったもので、他の方法で上手くいっているのでご報告します。

方法は、
php.iniで文字コードを変換し、設定するだけです。
WPはデフォルトのままでUTF8に設定するだけでOKです。

phpMyadminの動作がちょっと怪しい気がしますが運営上では特に問題なく動いています。

方法としてはCPIからすると「非推進」なのでしょうが、WPのバージョンアップ版ではutf8のみの仕様となっているので、現時点ではこの方法がシンプルかもしれません。

EUC-jp版の対応もWPからアナウンスされるみたいですけど・・・・
4. Posted by MOO@BeLive4    2007年06月03日 05:54
通りすがりさん
コメントありがとうございます。

私もこの方法がベストであると思っていません。
いろいろと試してみる必要があると思っています。
WPもME2.1.x系はEUC-JP対応されているようですが、ME2.2系は現状ではUTF-8対応のみですからね。

CPIもせめてMySQL5だけでも、データベースのUTF-8指定が許されれば...

今度、通りすがりさんの方法も試してみたいと思います。
情報ありがとうございます。
これからも意見交換してください。
5. Posted by 通りすがり   2007年06月03日 17:39
バージョン古いですけど、WPのインストーラーを用意しているくらいなのですから、今後の対応は考えて頂きたいものですよねぇ。

そもそもWPを採用した経緯って、某会社のブログサービス(pro版)を利用できなくなった事とMTの場合ライセンスの関係がある為の苦肉の策なんでしょうけど・・・・

セキュリティーの強化はいいですが、DOM系との連鎖(ajaxとか)、将来的なUTF-8の利用率や他国語化等を考えればもう少し早い対応をして頂きたいものです。

サポート等も含めていい鯖なんで。還元率も?(笑)

ではでは。
6. Posted by kome2pierrot5    2010年02月10日 19:56
おかげさまで文字化けが直りました!
ありがとうございます。
7. Posted by MOO@あすまる   2010年02月11日 00:51
kome2pierrot様、コメントありがとうございます。
文字化け直ってよかったですね。

しかし、もっとよい方法は下記を参考にしてください。

【技術メモ】WordPressをUTF-8でインストールする(最終解決編)
http://blog.belive.jp/archives/50979683.html

[WordPress]CPIのサーバでUTF-8で設定する方法
http://belive.jp/archives/utf8_with_cpi/
8. Posted by 伊藤正弘   2011年07月28日 20:40
WordPressをインストールしたら・・・
以下のように文字化けするのですが?
どうすればいいのでしょうか?


繧オ繝シ繝舌�縺ョ PHP 繝舌�繧ク繝ァ繝ウ縺ッ 5.1.6 縺ァ縺吶′ WordPress 3.2.1 縺ッ 5.2.4 莉・荳翫�縺ソ縺ァ縺泌茜逕ィ縺ォ縺ェ繧後∪縺吶
9. Posted by MOO@あすまる   2011年07月30日 10:56
伊藤様、コメントありがとうございます。
一度ブラウザ側で文字コードを変更してみてはいかがでしょうか?
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 莉・荳翫�縺ソ縺ァ縺泌茜逕ィ縺ォ縺ェ繧後∪縺吶

コメントする

名前
 
  絵文字