PHPでSQL文を発行し、likeで検索をしています。

その際、全角数字と半角数字を同一視したいのですが、どうすればいいでしょうか。
「123」と「123」の検索結果を同じにしたいのです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント20pt

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/php_k05.htm

PHP 基礎編5 - 文字列関数 substr、strlen、strpos、split、list、time、crypt - SAK Streets

strtolower で半角に変換したらいいでしょう。


というか SQLは データベース側なので データベースは 何でしょうか?

id:takeuchi_k

strtolowerは小文字への変換では・・・

データベースはMySQLです。

2005/08/17 11:28:32
id:taknt No.2

回答回数13539ベストアンサー獲得回数1198

ポイント20pt

あ、失礼しました。


半角に変換するのは、先のURLの下のほうにあります。


MySQL側で 取得した項目を半角に変換するような関数が ちょっと見当たらないので

次のようにするしかないと思います。


・検索用の項目を作り、そこには 半角に変換した値を入れるようにする。

それで 検索したらいいでしょう。

id:takeuchi_k

ありがとうございます。

2005/08/17 12:22:23
id:thelon1980 No.3

回答回数7ベストアンサー獲得回数0

ポイント20pt

http://2php.jp/php/mb_convert_kana.html

2php : PHP mb_convert_kana()

取り合えず、変換だけなら以下のような感じで全角→半角になるはずです


$str = ”123”;


$str = mb_convert_kana($str, ’a’,”Shift_JIS”);


echo $str;


あと、SQL文はここで言う$strで回すと旨く行く筈

id:takeuchi_k

ありがとうございます。

03−1234−5678

というデータを、03-1234-5678で検索したい場合は(ハイフンの問題は脇におきます)、これではいけないですよね・・・

2005/08/17 12:26:44
id:thelon1980 No.4

回答回数7ベストアンサー獲得回数0

ポイント20pt

http://www.hatena.ne.jp/1124244941#

人力検索はてな - PHPでSQL文を発行し、likeで検索をしています。 その際、全角数字と半角数字を同一視したいのですが、どうすればいいでしょうか。 「123」と「123」の検索結果を同じに..

半角→全角は以下のようなソースで上手くいく筈


$str = ”123”;


$str = mb_convert_kana($str, ’a’,”Shift_JIS”);


echo $str;


SQLはココでいう$strをlikeで検索かければ上手くいくのでは

id:takeuchi_k

ありがとうございます。

前の解答のコメントで書いたように、検索の「ゆらぎ」を吸収したいのですが、なかなか一発で決めてくれる関数ってないですよね。

2005/08/17 12:27:44
id:tomoki_u No.5

回答回数48ベストアンサー獲得回数0

ポイント20pt

http://www.hatena.ne.jp/1124244941#1

人力検索はてな - PHPでSQL文を発行し、likeで検索をしています。 その際、全角数字と半角数字を同一視したいのですが、どうすればいいでしょうか。 「123」と「123」の検索結果を同じに..

テーブルに格納するデータも全て半角に変換して格納すればどうですか?もちろんオリジナルの項目とは別にキー用のフィールドとして準備します。

検索する際に、検索キーをその変換ロジックに通してSELECTすればいいかと思います。

プログラミング言語が解決する問題ではなく、設計・実装で解決する問題ですね。

id:takeuchi_k

なるほど。格納するときに半角変換は考えたのですが、検索用のフィールドを作る手がありましたか。これをやってみます。

ありがとうございます。

2005/08/17 12:53:38

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません