スレッド表示 | フラット表示〕 全トピック 920 件中 237 番目 次≫ ≪前

文字化けする文字でLIKE検索

created: 2006-06-05 16:11 | modified: 2006-06-08 09:59 | reply: 5

[3095] 文字化けする文字でLIKE検索

user: しゃー | created: 2006-06-05 16:11
お世話になります。

PHP5.0+MySQLの環境で
DB文字列検索を行おうとしているのですが、
文字化けするコードでLIKE検索しても
エスケープさせているのですがHITしないのです。

文字化けする文字列は"暴"という文字です。

$sql = $sql."AND title LIKE '%".mysql_real_escape_string($vtitle)."%' ";

以上のようなSQL文ですが、記述に間違いなど
あるでしょうか?

回避方法等あれば教えてください。

すみませんが、よろしくお願いします。

ちなみにLIKE検索せずに=でSQL文を生成し、
試してみると問題なく取得できました・・・。
reply: 3099 返信 編集 削除

[3099] シフトJISでしょうか

user: ゆうじ | created: 2006-06-06 00:07
こんばんわ。

どこかの文字コードが シフトJIS という前提で。

「暴」の文字コードが「965C」なので、「5C」=「\」が影響し
どこかでエスケープ処理が適切にされてないか
余計なエスケープ処理がされていると思われます。

以下のようなところで影響を受けてます。

1.フォームから来た文字コード
2.magic_quotes_gpc の設定値
3.Mysqlの文字コード
4.mysql_real_escape_string

先ずは var_dump($sql) で
問合せ前のSQL文を確認することからですね。
Parent: 3095  reply: 3101 返信 編集 削除

[3101] シフトJISです。

user: しゃー | created: 2006-06-06 13:41
返答ありがとうございます。

magic_quotes_gpc について知らなかったもので
いろいろ調べてみたところインストールした時の
デフォルト設定で on になっているようですね。

こちらについては悪意のあるコードをエスケープするという
ことなのでそのままにしておきます。

いろいろ試してみてできた事はDB格納時に
mysql_real_escape_string を使用し、"暴"を格納。
検索する時に stripslashes を使用し、"暴"で検索。

すると一応検索する事はできました。

ただ、予期しない文字までHITしているようなので
これまた謎です・・・。var_dump($sql) で確認すると
LIKE '%?' と検索しているようなので正しい取得では
ないような気もします。。。

いろいろとSQL文を変えないといけないのであれば
magic_quotes_gpc を off にした方がいいのでしょうか?
Parent: 3099  reply: 3102 3103 返信 編集 削除

[3102] あれ・・・?

user: しゃー | created: 2006-06-06 13:52
今サーバー環境確認したら
magic_quotes_gpc = off でした。

訳がわからなくなってきました・・・。(汗)
Parent: 3101  返信 編集 削除

[3103] magic_quotes_gpc と mysql_client_encoding

user: ゆうじ | created: 2006-06-06 20:03
magic_quotes_gpc = On は
悪意のあるコードをエスケープしてはくれるのですが、
今回の「暴」のようにシフトJISとアスキーコードで
衝突する文字もエスケープされたり、
外部から来た値をチェックするのに
エスケープを取り除かなければならなかったりと、
今ひとつ便利さが感じられません。

エスケープ処理は、必要な時に、
プログラム側でやる方が管理しやすいので、
私は magic_quotes_gpc = Off にしています。


0.magic_quotes_gpc = Off

1.入力値の値チェック
2.入力値をエスケープしてSQL文作成
3.問合せやインサート
4.結果表示

外部との入出力やPHPスクリプト、
内部エンコーディング、Mysqlの文字コードなど
全て同じ文字コードなら上記手順だけで
化けたりすることは無いはずですが、
どこか違うエンコードがあるならば
文字コード変換も必要かと思います。

●mysql_client_encoding
http://jp.php.net/manual/ja/function.mysql-client-encoding.php
これで文字コード確認した方が良いかもしれません。
Parent: 3101  reply: 3104 返信 編集 削除

[3104] 後日確認後報告します。

user: しゃー | created: 2006-06-08 09:59
すみません。

別件の作業が入りました。

後日確認できたら報告いたします。
Parent: 3103  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 237 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑