• 締切済み

phpmyfaq の検索が正常に動作しない?

ご覧いただきありがとうございます。 phpmyfaq を使用して仕事で使用する為の faq を作成しようとしています。 phpmyfaq のインストールも正常に終了したため、faq を登録後に検索をしたところ、英数字は正常に検索できるのですが、漢字などのマルチバイトで検索した場合、正常に検索される場合と正常に検索されない場合があります。 文字コード関連ではないかと考えているのですが原因が特定できておりません。 例えば以下のような感じです。 ----- "環境変数" で検索 -> 検索されません。 "変数" で検索 -> 検索されます。 "環境" で検索 -> 検索されません。 ----- mysql にて sql 文を出力するようにして sql 文を確認したところ次のように文字化けしているように見えます(以下は"環境変数"で検索した際の where 句を抽出したものです)。 ----- WHERE (faqdata.thema LIKE '%軆'ー蠅・、画焚%' OR faqdata.content LIKE '%軆'ー蠅・、画焚%' OR faqdata.keywords LIKE '%軆'ー蠅・、画焚%') ----- また、検索ワードを保存するテーブルの内容も文字化けしているように見えます。 ----- mysql> select * from faqsearches; +----+------+--------------------+---------------------+ | id | lang | searchterm | searchdate | +----+------+--------------------+---------------------+ | 1 | ja | 迺ー蠅・ | 2012-11-27 08:30:36 | | 2 | ja | 迺ー蠅・ | 2012-11-27 08:33:59 | | 3 | ja | 迺ー蠅・ | 2012-11-27 08:46:24 | | 4 | ja | 迺ー蠅・、画焚 | 2012-11-27 08:47:25 | | 5 | ja | 險€隱・ | 2012-11-27 08:48:45 | +----+------+--------------------+---------------------+ ----- ブラウザ(google Chrome)上では正常に日本語が表示されております。 データベース内部では上記のようなコードで保存されるとも考えていますが、 やはりこの部分が怪しいのではないかと考えています。 何か分かることがありましたら、ご教示いただけると幸いです。 なお、環境は次のとおりです。 ----- Windows XP phpmyFAQ 2.7.9 Apache 2.2.22 mysql 5.5.28 php 5.3.19 ----- 以下、文字コードに関連がありそうな設定を列挙いたします。 -----[php.ini] ここから----- [PHP] default_charset = "UTF-8" [mbstring] mbstring.language = Japanese mbstring.internal_encoding = "UTF-8" mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = Off mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII mbstring.substitute_character = none -----[php.ini] ここまで----- -----[my.ini] ここから----- [mysql] default-character-set=utf8 [mysqld] character-set-server=utf8 -----[my.ini] ここまで----- Apache 2.2 では AddDefaultCharset の設定が無いため、設定しておりません。 以上です。

  • PHP
  • 回答数2
  • ありがとう数2

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

>提示いただいたコードを記述したファイルをブラウザで開くと、普通に "環 >境変数" と表示されました。 utf-8で保存していないのでは? >また SQL 文が出力されたファイルをテキストエディタ(秀丸)で開きましたが、 >"迺ー蠅・、画焚" と表示されたままでした。 utf-8で開いていますか(エディタが認識している文字セットの確認はされていますか)。 また、最初の質問では「軆'ー蠅・、画焚」と書かれていましたよね(なので「迺ー蠅・、画焚」とは不一致になったと思います)。

tanishimi
質問者

お礼

回答いただきありがとうございます。 >utf-8で保存していないのでは? はい。その通りでした。 utf-8 で保存したところ、ブラウザには "迺ー蠅�、画焚" と表示されました。 また、秀丸において utf-8 で開く設定をしたところ、 "軆'ー蠅・、画焚" で表示されました。 私自身勉強不足で申し訳ないのですが、やはり文字コードが影響しているということでしょうか。

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

文字化けして見えるというのは、utf-8のデータをsjisで見ているというだけでは? <?php mb_internal_encoding('utf-8'); header('content-type: text/html; charset=Shift_JIS'); print '環境変数'; でも、それならそれで「環境変数」は「迺ー蠅・、画焚」になりそうなものですけどね。 まずは出力したSQL文を「utf-8」で開いてみてください。

tanishimi
質問者

お礼

回答ありがとうございます。 提示いただいたコードを記述したファイルをブラウザで開くと、普通に "環境変数" と表示されました。 また SQL 文が出力されたファイルをテキストエディタ(秀丸)で開きましたが、"迺ー蠅・、画焚" と表示されたままでした。 引き続き調査してみます。

関連するQ&A

  • PHPとMYSQLの文字コードについておねがいします。

    Apache2、PHP5、MYSQL5.0を使用しています。 当方、PHPの初心者講座などを見てUTF-8で作っていこうと思い設定をしたものの、上手くいかず質問させていただきました。 PHPからQuery文(日本語)を送ってMYSQLのテーブルにINSERTしたのですが、文字化けしてしまいます。 my.iniのdefault-character-set=部分をutf8からsjisやujisなどに変えてやってみたのですが、文字化けの種類(?)が変ってしまうだけでやはり文字化けしてしまいました。 ALTER DATABASE AAA CHARCTER SET utf8をやっても変らず文字化けしてしまい、show variables like 'char%'でCharcterを調べたところ、下記のようになっていました。 charcter_set_client | utf8 charcter_set_connection| utf8 charcter_set_database | utf8 charcter_set_filesystem| binary charcter_set_results | utf8 charcter_set_server | utf8 charcter_set_system | utf8 MYSQLとPHPの文字に関係あるようなところをコピーしました。 どこかおかしなところがあるでしょうか。 ------my.ini----- [mysql] default-character-set=utf8 [mysqld] default-character-set=utf8 ----------------- ------php.ini----- output_buffering = Off extension=php_mbstring.dll [mbstring] mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.encoding_translation = On ------------------ どなたか解決策を知らないでしょうか。よろしくお願いします。

    • 締切済み
    • PHP
  • xamppのMySQLの文字化け

    いつもお世話になっております。 xamppをインストールし、開発を行っております。 formでsubmitし、DBに登録すると文字化けを起こします。 MySQLは下記項目を追加しました。 C:\xampp\mysql\bin\my.ini -------------------------------------------------- [client] default-character-set = utf8 [mysqld] skip-character-set-client-handshake character_set_server=utf8 init-connect=SET NAMES utf8 (ここに default-character-set = utf8 を追加するとMySQLが起動しなくなります。) [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 php.iniは下記のように設定してあります。 php.ini -------------------------------------------------- mbstring.detect_order auto mbstring.encoding_translation Off mbstring.func_overload 0 mbstring.http_input UTF-8 mbstring.http_output UTF-8 mbstring.http_output_conv_mimetypes ^(text/|application/xhtml\+xml) mbstring.internal_encoding UTF-8 mbstring.language Japanese mbstring.strict_detection Off mbstring.substitute_character no value 日本語が正しく登録されていれば、表示は正しくされます。 おかしな部分、足りない部分等ありましたら、ご教示ください。 よろしくお願いいたします。 [環境]  MySQL:5.5.8  PHP:5.3.5  xampp:1.7.4

    • ベストアンサー
    • MySQL
  • MySQLから送られて来たデータの文字化け

    いつもお世話になっています。 今回、phpでmysqlに接続したのですが、mysqlから引っ張ってきたデータが文字化けして困っています。(日本語のみ文字化け) 使っている環境は以下の通りです。 IIS6.0 PHP 5.0.4 MySQL 4.1.22 IISは、CGI、ASP、ISAPIを許可にしています。(.phpを見れるようになっています。) php.iniのmbstringの設定は以下のようになっています。 1105 mbstring.language=Japanes 1110 mbstring.internal_encoding = EUC-JP 1113 mbstring.http_input = auto 1117 mbstring.http_output = SJIS 1124 mbstring.encofing__translation = On 1128 mbstring.detect_order = auto 1132 mbstring.substitute_charecter = auto 1133 mbstring.script_encoding = EUC-JP my.iniの設定は以下のようになっています。 [mysql] default-character-set=sjis [mysqld] default-character-set=sjis skip-character-set-client-handshake mysqlでコマンドで確認したところ以下のような文字設定になっています。 mysql> show variables like "char%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | sjis | | character_set_connection | sjis | | character_set_database | sjis | | character_set_results | sjis | | character_set_server | sjis | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ character_set_systemがutf-8になっているのが気がかりですが、 こんな感じで設定しています。 mysql内では文字化けしていないのに、 phpで呼び出した時に文字化けするのでしょうか? どなたかご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • MySQLとPHPで日本語が文字化けする。

    MySQLとPHPでアプリを開発中です。 MySQLに登録済の日本語文字列データをPHPでselectして echoを使ってクライアント(Windows XP)のブラウザに表示させると、 文字化けします。 全角文字がすべて半角の '?' になります。 MySQLの状態を調べるために以下を実行しました。 SHOW VARIABLES LIKE 'char%'; 結果は以下のとおりでした。 character_set_client utf8 character_set_connection utf8 character_set_database utf8 character_set_filesystem  binary character_set_results utf8 character_set_server utf8 character_set_system utf8 character_sets_dir /usr/local/mysql5.0.51a/share/mysql/charsets/ PHPの内部エンコードはUTF-8です。 php.iniの関連設定は以下のとおりです。 default_charset = "UTF-8" mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII mbstring.substitute_character = "none" mbstring.encoding_translation = On extension_dir = "/usr/local/lib/php/extensions" extension=php_mysqli.dll extension = gd.so extension = mysqli.so extension = xmlrpc.so MySQLもPHPもすべてUTF-8で統一したので問題ないはずだと 思ったのですが? 半角アルファベットは問題なく表示されます。 サーバー側OSはSolarisです。 MySQLから正しくデータを得られていないように思えるのですが。 ヒントでも結構ですから教えていただけるとありがたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP+MySQLでの検索処理について2

    前回質問させて頂いた件ですが詳細情報を追記致します。 PHP+MySQLで部分一致検索の処理を作成しているのですが ある文字は正常に検索できてある文字は正常に検索できていないといった文字によって動きが異なります。 原因が不明なのでどなたか教えてください。 宜しくお願いします。 【現象】 下記の(1)(2)のDB項目を"作成"の部分一致で検索しても(1)しか検索されない。(両方とも漢字) (1)XXX作成 (2)○○○作成 【環境】 PHPのバージョン・・・4.4.2 MySQLのバージョン・・・4.0 【検索SQLの一部】 "テーブル名 LIKE '%".mb_convert_encoding(検索文字列,"UTF8","SJIS")."%'"; 【php.info情報】 mbstring.http_input:auto mbstring.http_output:SJIS mbstring.internal_encoding:SJIS mbstring.language:Japanese mbstring.encoding_translation:On Multibyte Support:enabled Multibyte Support :enabled

    • ベストアンサー
    • PHP
  • サーバー移転で文字化け

    ロリポップ!からhetemlにサーバー移転したところ、データベースから取り出したデータが文字化けするようになってしまいました。 因みにmysqlのデータは変換なしでエクスポートし、インポートしております。 ã€ã‚¨ãƒ´ã‚¡ã€‘ã½ã‹æ³ 上記のような文字化けです。 キャラクターセット周りが怪しいと思い、色々試してみましたが一向に治る気配がありません・・。 php varは5.3です。 .htaccessに「AddHandler php5.3-script .php」と記述して使っております。 mysql varはMySQL5.0.51aです。 MySQLのキャラクターセットはこんな感じです。 Variable_name Value character_set_client utf8 character_set_connection utf8 character_set_database utf8 character_set_filesystem binary character_set_results utf8 character_set_server utf8 character_set_system utf8 phpでの接続はこのようにしております。 mb_language('uni'); mb_internal_encoding('utf-8'); mb_http_input('auto'); mb_http_output('utf-8'); $con = mysql_connect('xxx','xxx','xxx') or die(mysql_error()); mysql_set_charset('utf8'); mysql_select_db('xxx') or die(mysql_error()); php.iniの設定は以下のとおりです。 mbstring.detect_order utf-8 mbstring.encoding_translation off mbstring.func_overload 0 mbstring.http_input pass mbstring.http_output pass mbstring.internal_encoding utf-8 mbstring.language neutral 何をやっても治らず、途方に暮れております。 ご助言をよろしくお願いいたします。

  • php,mysqlでの文字化け(機種依存文字)について

    機種依存文字「○いち」「(株)」の文字化けがどうしても解消できません。 phpソースに機種依存文字をコーディングした場合には正しく表示されますが、外部より入力した文字をMySQLに格納し、phpにてデータを取り出し表示すると文字化けします(phpmyadminでの表示時点で文字化け)。 「mb_convert_encoding」等にてテストしてみましたが、結果は変わりませんでした。また、phpmyadminにて直接MySQLに入力しても、phpmyadminでもブラウザ(php表示)でも文字化けしてしまいます。 文字コードについて知識が浅く、各環境はデフォルト状態です。 「mbstring.internal_encoding = EUC-JP 」にも関わらず、「character_set_client = utf8」「character_set_results = utf8」としているのに、機種依存文字以外は問題無く表示されております。 1.機種依存文字化けの対応方法 2.正しい環境設定方法(文字コードの統一を行うべき等) ご教授のほど、何卒宜しくお願い致します。 <<環境>> ・windows xp ・UNIX socket 4.1.22 ・phpMyAdmin - 2.11.1 ・Mysql 4.1.21 ・PHP 4.4.7 【Mysql】 character_set_client = utf8 character_set_connection = utf8 character_set_database = utf8 character_set_results = utf8 character_set_server = ujis character_set_system = utf8 【my.cnf】 [client] default-character-set = ujis [mysqld] default-character-set = ujis [mysqldump] default-character-set = ujis 【php.ini】 mbstring.language = Japanese mbstring.encoding_translation = On mbstring.http_input = auto mbstring.http_output = EUC-JP mbstring.internal_encoding = EUC-JP mbstring.detect_order = auto mbstring.substitute_character = none; ※phpソースには「charset=euc-jp」を記載

    • 締切済み
    • PHP
  • wamp文字化けについて

    いつもお世話になっています。 WAMP環境で文字化けから抜け出せません。 ご教授お願いします。 ブラウザ上での入力、表示は正常ですが、コマンドプロンプトから直接テーブルの中身をselect * fromすると日本語のフィールだけ中身が文字化けします。 例)フォームで あいうえお(フィールド定義:varchar(100))と入力すると 縺ゅ>縺・∴縺・と表示されています。 Apache2.2.17, PHP5.3.5, MySQL5.5.9です。 Apache関連  httpd-languages.conf:AddDefaultCharset utf8・・・追記 PHP関連  php.ini: mbstring.internal_encoding=uft8 mbstring.language = Japanese mbstring.http_output = utf8 default_charset = "utf8" MySQL関連 mysql> show variables like 'char%'; +--------------------------+-----------+ | Variable_name       | Value | +--------------------------+-----------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | C:\Program Files (x86)\MySQL\MySQL Server 5.5\share \charsets\ | +--------------------------+---- #### my.ini #### [client] port=3306 [mysql] default-character-set=utf8 # SERVER SECTION [mysqld] ※中略※ # The default character set that will be used when a new schema or table is # created and no character set is defined character-set-server=utf8 skip-character-set-client-handshake

    • 締切済み
    • PHP
  • MySQLの文字化けが直りません。

    MySQLの文字化けが直りません。 CentOS5.4+Apache2.0+ PHP 5.1.6 MySQL Server, Client とも 5.0.77 を使用しています。 設定は次の通りですが、Windows7 のクライアント機から見ると文字化けしてしまいます。 # mysql -p root -p*** (エラーを生じさせてみる) ERROR 1049 (42000): 'root' 、ハ、?ニ・ヌ。シ・ソ・ル。シ・ケ、マテΤ熙゛、サ、・ ************************************************** mysql> status Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 -------------- php.ini は次の設定です。 1123 [mbstring] 1125 mbstring.language = Japanese 1130 mbstring.internal_encoding = UTF-8 1133 mbstring.http_input = auto 1137 mbstring.http_output = UTF-8 1144 mbstring.encoding_translation = Off 1148 mbstring.detect_order = auto 1152 mbstring.substitute_character = none; 文字化けを直すにはどのようにすれば良いでしょうか?

    • ベストアンサー
    • MySQL
  • DB内の日本語データがPHPで取得できない

    利用サーバ:さくらインターネットのレンタルサーバ 利用データベースのバージョン:MySQL 5.1 PHPのバージョン:PHP 5.2.×× PHPMyAdminに記載のMySQL の文字セット: UTF-8 Unicode (utf8) PHPMyAdminに記載のMySQL 接続の照合順序: utf8_general_ci htmlやPHPファイルを、EUC-JPからUTF-8に、全て変えたためなのかは分かりませんが、 データベースに格納されている日本語(というか全角文字?)データを、 PHPで取り出せなくなってしまいました。半角英数字のデータは取得できます。 そのためDBから取得して表示させている文字データのうち、日本語のみが表示されません。 【php.iniファイルの中身】 register_globals = "On" mbstring.language = "Japanese" mbstring.internal_encoding = "UTF-8" mbstring.encoding_translation = "On" default_charset = "UTF-8" output_buffering = "Off" mbstring.http_input = "auto" mbstring.http_output = "pass" mbstring.detect_order = "auto" mbstring.substitute_character = "none" 情報は足りますでしょうか?どなたか、よろしくお願いいたします。

    • ベストアンサー
    • MySQL

専門家に質問してみよう