*単語検索で、全角英数字と半角英数字の区別なく検索したい [#v672c8b5] -ページ: BugTrack -投稿者: [[reimy]] -優先順位: 普通 -状態: 着手 -カテゴリー: 本体新機能 -投稿日: 2003-05-21 (水) 11:32:05 -バージョン: **メッセージ [#n1057ea6] 単語検索で、大文字と小文字は同一視して検索されるが、全角と半角は区別される。 全角英数字と半角英数字も同一視して検索したい。 ---- -[[PHP:mb_convert_kana]]を使えば何とかなりそうですが。 -- [[ぱんだ]] &new{2003-05-21 (水) 12:44:39}; --func.phpのdo_search()ですよねぇ。キー入力側は $b_type = ($type == 'AND'); // AND:TRUE OR:FALSE + $word = mb_convert_kana($word,"a"); $keys = preg_split('/\s+/',preg_quote($word,'/'),-1,PREG_SPLIT_NO_EMPTY); ~でいいと思うんですけど、ソースの読み込み側で半角英文字化するのはどの部分でやればいいんでしょうか。 -- [[reimy]] &new{2003-05-21 (水) 23:33:37}; -いろいろやってみたけど、うまくいかない -- [[reimy]] &new{2003-05-23 (金) 04:03:12}; -適当に作ってみました。試してみてください。ついでなのでひらがな/カタカナおよび全角の大文字/小文字も同一視するようにしてあります。 -- [[ぱんだ]] &new{2003-05-23 (金) 11:35:29}; --func.phpに追加したget_search_words()は、 Array ( [0] => テスト [1] => test ) を食わせると Array ( [テスト] => (?:テ|て|テ)(?:ス|す|ス)(?:ト|と|ト) [test] => (?:t|T|T|t)(?:e|E|E|e)(?:s|S|S|s)(?:t|T|T|t) ) を返す関数です。 -- [[ぱんだ]] &new{2003-05-23 (金) 11:40:15}; -いただきましたm(__)m。おー、すごく便利になったぁ。 -- [[reimy]] &new{2003-05-23 (金) 14:26:00}; --半角カタカナでも検索できる。びっくり!! -- [[reimy]] &new{2003-05-23 (金) 14:33:42}; -「J&」で検索したとき、検索結果で「&color(inherit,yellow){J&};amp; のすべてを含むページは…」と表示されてしまう。 -- [[reimy]] &new{2003-05-23 (金) 14:54:04}; --「これらのキーワードがハイライトされています: &color(inheri,yellow){J&};」のほうは正常に表示される。 -- [[reimy]] &new{2003-05-23 (金) 15:01:22}; -んー。$pattern内の'&'がエスケープされていませんね。これでどうですか。 -- [[ぱんだ]] &new{2003-05-23 (金) 15:36:03}; --- html.php +++ html.php.new foreach ($keys as $key=>$pattern) { $s_key = htmlspecialchars($key); + $s_pattern = htmlspecialchars($pattern); // ;( $search_word .= " <strong class=\"word$class\">$s_key</strong>"; $to = "<strong class=\"word$class\">\$1</strong>"; $body = preg_replace("/(?:^|(?<=>))([^<]*)/e", - 'preg_replace("/($pattern)/i",$to,\'$1\')',$body); + 'preg_replace("/($s_pattern)/",$to,\'$1\')',$body); $class++; -キャラクタ'(?:|)'がhtmlspecialchars()で変換され''ない''ことを前提にしています。本来はパターンを結合する前にhtmlspecialchars()を通しておくべきですね。 -- [[ぱんだ]] &new{2003-05-23 (金) 15:48:02}; --うまくいきましたm(__)m -- [[reimy]] &new{2003-05-23 (金) 17:03:26}; #comment