[PHP-users 7234] MySQLでワイルドカードを使ってひらがな&カタカナ1文字にマッチさせるためには

Sakamoto php-users@php.gr.jp
Tue, 30 Apr 2002 04:04:32 +0900


坂本です。

辞書や用語関連の検索プログラムを作成していますが、
ワイルドカード%でひらがなとカタカナのマッチがうまくいきません。
しかし英語のアルファベットは正常にマッチしてくれます。

<プログラム内容>
あ、い、う、、、、、(カタカナを含む)の50音にマッチする単語が
あれば各かなのリンクリストとして表示し、表示されたかなのリンクリスト、
例えば「あ」をクリックした時に「あ」で始まる単語のリストを表示させる。

<ソース>
$kana=array("あ","い","う","お",……,"Z");
while (list(, $str) = each($kana)) {
 $result = sql_query("select * from "jisho where id='$id' AND title LIKE
'$str%'", $dbi);
 if (sql_num_rows($result) > 0) {
     echo "<a
href=\"jisho.php&op=list&id=$id&str=".urlencode($str)."\">$str</a>";
else {
     echo "$str";
 } 、、、、、、続く、、、

<ソース内容>
配列にあるひらがなやカタカナで始まる単語のリストを作成するときに
LIKE $str% でマッチしたものをリンクリストとして表示します。マッチしない
配列の因子はそのまま表示します。マッチしたURLのリンクリストは
EUCコードでソースを書いているので$strをURLエンコードして
配列にマッチしたデータをサーバに送信し、続くソースでidを基準に実際の
単語リストを表示します。$strをURLエンコードしない場合はIEでは
デフォルトでURLをUNICODEとして送信しているため、マッチしない
場合があるためURLの$strはURLエンコードの処理をしました。

<ミスマッチする内容>
は(A4CF)れ(A4EC)ろ(A4ED)、
ひ(A4D2)ふ(A4D5)、
ト(A5C8)リ(A5EA)ル(A5EB)、
ダ(A5C0)チ(A5C1)、
レ(A5EC)ロ(A5ED)ワ(A5EF)、

などが同じ文字としてマッチして検出されます。
WIN2000だけではなくSOLARISでも同じでした。
charsetsのマッピングによるものかと思い、デフォルトの
latin1からujis変更しても同じでした。

どなたか解決策をご存知でしたらアドバイスを
お願いいたします。