MobileConverterでajaxserachエラー

質問全般・改善要望
返信する
dimm
メンバー
メンバー
記事: 28
登録日時: 2009年11月25日(水) 16:57

MobileConverterでajaxserachエラー

投稿記事 by dimm »

[サーバ]
 ホスト&契約タイプ:さくら ビジネス
 ネットワーク:インターネット
 PHPバージョン:php5.2.4
 DB:(例 MySQL5.1
[modx]
 バージョン:1.0.2J
 アドオン:MobileConverter,ajaxsearch1.84


いつもお世話になっております。
MobileConverterを使用するとajaxserachの検索結果がエラーになってしまうのですが、改善方法はありますでしょうか?
どなたかお解りになる方がおられましたらご教示下さい。
よろしくお願いいたします。
MEGU
メンバー
メンバー
記事: 39
登録日時: 2009年7月29日(水) 18:05

Re: MobileConverterでajaxserachエラー

投稿記事 by MEGU »

dimm さん。こんにちは。

どのようなエラーか貼り付けると、解答される方も、
お答えしやすいと思いますよ。^^。
dimm
メンバー
メンバー
記事: 28
登録日時: 2009年11月25日(水) 16:57

Re: MobileConverterでajaxserachエラー

投稿記事 by dimm »

言葉足らずでたいへん申し訳ありませんでした。

ttp://onnajiruc.x.fc2.com/mobilecap.jpg
にエラーメッセージのキャプチャした画像を載せました。
お願い致します。

MobileConverterの設定タブのMobile charsetの値を、Shift_JISからUTF-8に設定してみると、上記のエラーの文字列が
表示されなくなったのですが、肝心の検索結果がでてきません。正直お手上げ状態です。
dimm
メンバー
メンバー
記事: 28
登録日時: 2009年11月25日(水) 16:57

Re: MobileConverterでajaxserachエラー

投稿記事 by dimm »

MobileConverterの設定タブのMobile charsetの値をUTF-8に設定した時に、エラーメッセージがでるのは私のajaxsearchのスニペット記述の&AS_landing=``のページ指定が適切でないためでした。検証不足で申し訳ありませんでした。

しかし、MobileConverterでShift_JISにページを変換し、ajaxsearchの入力フォーム内にマルチバイト文字を入れると、検索結果は表示されず、「一致する検索結果はありません」と表示されてしまいます。半角英数ならうまくいくのですが、マルチバイト文字では検索されません。
マルチバイト文字でも検索されるようにするには、リソースファイルに何か記述等を加えれば実現できるのでしょうか。どなたかご助言よろしくお願いいたします。
soushi
管理人
記事: 224
登録日時: 2009年7月30日(木) 01:59

Re: MobileConverterでajaxserachエラー

投稿記事 by soushi »

こんばんわ :D

ajaxserachのソースを詳しく追ったわけではないですが、ソース中に"mb_convert_encoding($this->searchString, $this->pgCharset , "UTF-8");"という記述があり、文字コードの確認をしているところがあるみたいです。
(grepでひっかけただけなので、間違ってたらすいません)
dimmさんのmodxはUTF-8で動いているので、ここでmb_convert_encoding()にてUTF-8->UTF-8の変換が発生します。

おそらくうまく検索できないのはこんな感じで動いているからではと思います。

MobileConverterを使って出力をShift_JISに変換しているため、特定のページだけは文字コードがShift_JISの状態でブラウザに送られる。
Shift_JIS書かれたページで検索すると、検索ワードがサーバにShift_JISでPOSTされる。
ajaxserach内でUTF-8->UTF-8の変換が発生するが、実際にPOSTされている検索ワードはShift_JISなので不整合が生じる。
mb_convert_encoding()関数は指定した文字コードから外れる文字を削除する機能があるため、Shift_JISな検索ワードは軒並み削除される。

ちなみにMobileConverterは単純なプラグインのためmodxの文字コードを上書きするような機能はなく、単純にhtmlの出力の最後にUTF-8 -> Shift_JISの変換をかけているだけです。
そのため、modx自体の文字コードUTF-8として動作しています。

それで解決方法なのですが、以下の方法があるかなと思ってます。

・MobileConverterでmodxの文字コードも制御する
できるかわからないですが、もしやったとしてもmodxにShift_JIS用の言語ファイルがないのでどこかで問題が起こりそうなので、ダメかもです。

・MobileConverterでPOST(QUERY_STRINGも?)されてきた文字列も変換の面倒を見る
なんとなく良さそうな方法です。
僕の方で改修してもいいのですが、ちょっと私情で自宅のPC環境とNW環境がしばらく使えないので、修正は時間ください…。

・mb_check_encodingを利用する
php.iniの設定ができるようでしたら以下の設定を入れてみると(もしかしたら)動くかもしれません。

コード: 全て選択

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
mbstring.http_input = auto
mbstring.http_output = pass
php.iniの修正はphpの動作全てに影響があるので、慎重に設定していただければと思います。
dimm
メンバー
メンバー
記事: 28
登録日時: 2009年11月25日(水) 16:57

Re: MobileConverterでajaxserachエラー

投稿記事 by dimm »

soushiさん

すばらしいアドバイスの数々ありがとうございました。
最後のPHPiniを利用したやり方で動作するようになりました。
まだ完全にすべての検証を終えたわけではないのですが、一通りサイトの機能をさわった限りでは、今の所問題は出ておりません。
この記述によるセキュリティ上の問題点などは何か考えられますでしょうか?
soushi
管理人
記事: 224
登録日時: 2009年7月30日(木) 01:59

Re: MobileConverterでajaxserachエラー

投稿記事 by soushi »

soushiです。

無事に動いたようでよかったです :D
dimm さんが書きました: 最後のPHPiniを利用したやり方で動作するようになりました。
まだ完全にすべての検証を終えたわけではないのですが、一通りサイトの機能をさわった限りでは、今の所問題は出ておりません。
この記述によるセキュリティ上の問題点などは何か考えられますでしょうか?
今回の設定のキモは「mbstring.encoding_translation」になりまして、クライアントから送られてきたデータの文字コードをphpのプログラムに渡す前に都合のいい文字コードに変換してしまおうという機能です。

modx以外の他のシステムが動いていて、そのシステムの文字コードがEUC-JPだったりすると予期せぬ動作を引き起こしたりするかもしれません。
あと今回はUTF-8への変換なのでセキュリティ的な問題はあまりないかなと思います。これがShift_JISへの自動変換だとXSSの穴なんかが出そうな気がしますが。

MobileConverter側の対応は対応で修正を検討してみます~。
sama55
メンバー
メンバー
記事: 816
登録日時: 2009年8月03日(月) 08:16

Re: MobileConverterでajaxserachエラー

投稿記事 by sama55 »

以下はdimmさんのメッセージです。
-------------------------------------------------------------------
soushiさん

またまたアドバイスありがとうございます。
セキュリティ的な問題はあまりないということで安心しました。
修正の方よろしくお願いいたします。
-------------------------------------------------------------------

>dimmさんへ
別件の質問はこちらにトピに分割させていただきました。 :)
http://modxcms-jp.com/bb/viewtopic.php?f=7&t=208
返信する