![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
こんにちは。
現在PHP4+MYSQLでホームページの検索サイトを作っています。
カテゴリ検索とキーワード検索ができるようにしているのですが、
キーワード検索をすると、キーワードが入っていないレコードの情報まで表示されてしまいます。
エンコード設定に問題があるかも知れないのですが、
・全てのページのHTMLのエンコード設定
・全てのページのメタタグのエンコード設定
・MYSQLの文字コード設定
これらは全てEUCに統一されています。
その他にエンコード設定するべきところがあるのでしょうか?
それとも別なところに原因があるのでしょうか?
動作環境はレンタルサーバーなので詳しい設定まではわかりませんが、
Linux 2.4.X RedHat 7.x Apache/1.3.2X
mysql-3.23.46
です。
PHPのバージョンまではわかりませんでした。
わかる方いらっしゃいましたら教えてください。
No.5ベストアンサー
- 回答日時:
この手のデバックって、頭が痛いですよね。
。。(^^;まあ当然やられているとは思いますが、クエリするSQLをブラウザウに表示して、それをターミナルに直接張り付けるとどうなるでしょう?
って、レンタルサーバーですね?
sshやtelnetかなんかで、ログインできます?
この回答への補足
そうなんですよね。デバックつらいです。いろんな人がデバック手伝ってくれるのが唯一の救いです。
ssh/telnet不可でした。
現場の声を聞いてレンタルサーバー借りてもらいたいものです(^^;
クエリするSQLをブラウザに表示させながらやってますが「???」です。
表示される結果は前にも書いた通りで、特に問題はないように見えるのですが・・・。
phpmyadminというソフトがインストールされているので、そちらの方で確認しようと思います。
しかし、このシステムは3日から稼動させなくてはならないそうなので、とりあえず非表示にしておいて・・・という形でないと間に合いそうもありません。(本業はデザイナーですし。そちらの方の仕事もあるので)
imasyuさんやkusukusuさんのようにシステムに詳しい人がほとんどいないので、お二人のアドバイスは励みになってます。
いろいろご教授いただきありがとうございます。
MYSQLを利用したシステムは初めての上に、今まではメール送信フォームやアクセスカウンターしか作ったことがなかったので、勉強させていただきました。
今回は前にも書いたとおり、ハイライト用のタグを検索→なければ削除
という形で対処しました。
本当にありがとうございました。
No.4
- 回答日時:
>> $sql2 .="(colmun1~*'$key[$i]' OR colmun2~*'$key[$i]' OR ……)";
> の「~*」の部分の意味がわかりません。教えていただけないでしょうか?
申し訳ありません(^^;
よく見ればMySQLでしたね。。。
上のはPostgreSQLで用いる正規表現です。
MySQLで使えるかどうかは知りません。
この回答への補足
PostgreSQLだったんですね。
わからなかったので、とりあえずそのまま試したところダメでした。(^д^;)
いろいろ試してみたのですが、どうやっても解決しません。
PHPやMYSQLの設定自体に問題があるのかもしれません。
しかも残念なことに、このレンタルサーバーは.htaccess許可されてないんですよ。(;;)
当面の解決策として
キーワードがハイライトされるように処理をして、
キーワードがないレコードまで取得されてしまった場合、
ハイライトされた言葉(ハイライト用のタグ)があるかどうかチェック、
もしなければその情報を非表示にする、という方向でやってみようかと思います。
No.3
- 回答日時:
> ・全てのページのHTMLのエンコード設定
> ・全てのページのメタタグのエンコード設定
> ・MYSQLの文字コード設定
全てのエンコードがEUCで統一されているのであれば、問題は、もっと他の所にあると思います。
# 確実に統一されていれば
例えばどんなSQLをクエリしていますか?
今ざっと考えてみて書きのようなコードを書いてみました。
# and検索で、ちなみに試していないので悪しからず(^^;
$key=$_POST["key"];
if($key=="") { exit; }
//スペースが半角全角どちらでもいいようにmb_convert_kanaでスペースを変換
$key=explode(" ",mb_convert_kana($_POST["key"],"s"));
$sql="SELECT * FROM table_name WHERE ";
for($i=0;$i<sizeof($key);++$i) {
$sql2 .="(colmun1~*'$key[$i]' OR colmun2~*'$key[$i]' OR ……)";
//最後のキーワードの時以外は「AND」を入れる。
if($i!=sizeof($key)-1) { $sql2.=" AND "; }
}
$sql.=$sql2;
これで、多分
SELECT * FROM table_name WHERE (col1*~'釣り',col2*~'釣り',col3*~'釣り') and (col1*~'大漁' or col2*~'大漁' or col3*~'大漁');
と言ったような、カラム1かカラム2かカラム3に「釣り」と「大漁」と言った文字を含んだレコードを検索できると思います。
この回答への補足
ありがとうございます。
初歩的な質問で申し訳ないのですが、
>$sql2 .="(colmun1~*'$key[$i]' OR colmun2~*'$key[$i]' OR ……)";
の「~*」の部分の意味がわかりません。教えていただけないでしょうか?
今まではLINK演算子を使ってやってました。
たとえばキーワードに「釣り」「北海道」と入れた場合、
クエリされるSQLの内容は
SELECT * FROM table_name WHERE (col1 Like '%釣り%' OR col2 Like '%釣り%') AND (col1 Like '%北海道%' OR col2 Like '%北海道%') ORDER BY cnt DESC
となってました。
これから教えていただいた方法で試してみようと思います。
No.2
- 回答日時:
ほかにもっといい方法があるかも知れませんし、この方法でうまくいくかどうかはわかりませんが。
。おそらくexplode関数でスペースで区切って配列にしてforeachで要素を取り出しながらSQLを生成するのだと思いますが
その際に取り出した要素にエンコードをかけてみてもだめですか?
エンコードはEUCなので
$value = mb_convert_encoding($value,"EUC-jp");
でEUCになります。
一度受け取った値がどうなっているかをprintしてみるといいですよ。
この回答への補足
ありがとうございます。
試してみましたがだめでした。
値をprintした結果は正常だったのですが・・・。
どうやら「ひらがな」や「カタカナ」が含まれていると違うレコードまで書き出してしまうようです。「漢字のみ」だと正しく表示されるのですが、「漢字とひらがなが混ざった状態」だとダメでした。
もうすこしいろいろやってみようと思います。
何とか暫定的な処理で今回はごまかす(?)
ことにしました。時間がないので、とりあえずです。あとでこっそり修正予定です。
$value = mb_convert_encoding($value,"EUC-jp");
はウェブ上では頻繁に使いますよね。CSVにデータを落とし込む場合もEUCをSJISに~とかしなきゃいけないですからね。
アドバイスありがとうございました。
No.1
- 回答日時:
>キーワードが入っていないレコードの情報まで表示されてしまいます。
それは全部のレコードが表示されるのですか?
キーワード検索はスペース区切りのand検索ですか?
私はPHP4+oracleでキーワード検索をしたことがあるのですが基本的な部分は同じだと思うので補足お願いします。
この回答への補足
すいません。説明が足りませんでした。
検索はスペース区切りのand検索です。
全部のレコードは表示されません。どういった基準でかはわかりませんが、表示されるレコードとされないレコードがあるようです。
動作確認を私以外の人もやってたのですが、そのときはキーワード「釣り」で検索していました。他の人が言うには、
ためしにブラウザの設定をSHIFT_JISにすると、文字化けするが、【釣り】という文字が入ってないレコード情報に【文字化け後の釣り】という文字が入っているみたいだ、
という報告を受けています。
私も試してはみたものの、文字化けしていて、どこに何の文字が入っているかまったくわかりませんでした。
ちなみに半角英数でキーワードを入れた場合、正常に表示されます。
どうやらだめなのは全角文字のようです。
しかも正しく取得される全角キーワード(日本、や某出版社名)もありました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SEO 関係ないページを検索エンジンが拾ってしまう 1 2022/05/14 11:16
- ヤフオク! ヤフオク タイトル 隠し技? 裏技? 1 2023/04/25 06:09
- Excel(エクセル) セルの値をグーグルで検索するエクセルVBAについて! 2 2022/08/01 21:41
- Windows 10 Googleサイトのサイト内検索(虫眼鏡アイコン、検索ボックス)について 1 2022/04/08 12:16
- Amazon アマゾンで出版中の本の販売部数を伸ばすためには、どうすれば良いですか? 4 2022/08/18 23:30
- その他(ブラウザ) Microsoft edgeのアドレスバーからの検索について 画像のとおりアドレスバーに「aa」とい 1 2022/04/19 15:26
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Chrome(クローム) Chromeでgooglemap検索等結果が他国になってしまう 1 2022/10/05 12:18
- その他(SNS・コミュニケーションサービス) Yahoo!とGoogle検索のしくみの違いを教えてください 2 2022/08/14 01:53
- Google+ スマホやインターネットに関してお詳しい方 1 2022/03/24 14:10
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCEL2000VBAでハイパーリンク...
-
アメーバブログでバナーの編集...
-
アメブロのコメント履歴につい...
-
アメブロ写真の投稿を縦にしたい
-
シーサーブログの記事本文の自...
-
アメブロのトップページに固定...
-
seesaaブログで
-
アメブロでの音楽自動再生につ...
-
5chの物理に関連する質問
-
gooブログの作り方
-
ブログ人 リンク貼れない
-
mt v3とv4の違い
-
ブログサービス探し中
-
ブログ記事に貼る広告リンクに...
-
アメブロのアドレス
-
はてなダイアリー
-
過去の犯罪事実を蒸し返すよう...
-
gooのblogで、携帯からのコメン...
-
ブログの記事を過去にさかのぼ...
-
アメブロのプロフィールの編集...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCEL2000VBAでハイパーリンク...
-
MYSQLで違う検索結果が出てしま...
-
https://news.goo.ne.jp/il/100...
-
アメーバから警告文が送られて...
-
アメブロで特定ページを常にト...
-
アメブロ、俳優ブログにコメン...
-
自分のブログに過去記事をリン...
-
livedoorブログのコメント欄を...
-
自分のブログ内(アメブロ)で...
-
アメブロのトップページに固定...
-
ワードについての質問です、フ...
-
アメーバブログの投稿記事の上...
-
アメブロのプロフィールの編集...
-
アメブロで可愛い絵文字を使い...
-
アメブロのコメント履歴につい...
-
WordpressのWebサイト 編集の仕方
-
FC2ブログ 記事が下書きのまま
-
WordPressの記事の途中に差し込む
-
アメブロでのアメーバIDの変更
-
アメブロが開かない
おすすめ情報