2016-12-21 12 views
1

SQLでLIKE文を使用してスペースを%で置き換えてデータベース内の検索を検索します。PHP-絞り込み検索での検索

$in= str_replace(' ','%',$in); 
example : 'harry potter is a great book' becomes 'harry%potter%is%a%great%book' 

今、私は引用符の内側にあるものを、スペースをスキップしたい

' "harry potter" is a great book' become 'harry potter%is%a%great%book' 

ように、グーグルが行うよう、ユーザーが引用符を使用できるようにすることで、私の検索を絞り込みたい、またクエリを含めることができます複数の二重引用符。これはアウトでしょう

$str = '"harry potter" is a "great book"'; 

// get all matches between quotes 
preg_match_all('/".*?"/', $str, $matches); 

// do your normal replacement, and remove quotes 
$str = str_replace(' ', '%', $str); 
$str = str_replace('"', '', $str); 

// undo quoted replacements 
foreach ($matches[0] as $value) { 
    $value = trim($value, '"'); 
    $str = str_replace(str_replace(' ', '%', $value), $value, $str); 
} 

echo $str; 

harry potter%is%a%great book 

しかし、これは完璧にはほど遠いです

' "harry potter" is a "great book"' become 'harry potter%is%a%great book' 
+1

引用符が一致しない場合はどうなりますか?例 "" "ハリーポッター"は素晴らしい "本"です。 "ハリーポッター"または "ハリーポッター"が偉大な "または"偉大な "ですか? –

+1

ワイルドカード検索ではなく、全文検索が必要です。 – Devon

+0

@mistermartinだけ ""ハリーポッター "とクエリも二つ以上の引用符のペアを含むことができます – Azhar

答えて

1

は、ここでそれを行うには1つの迅速かつ汚い方法です。たとえば、同じフレーズが二重引用符または二重引用符で囲まれて複数表示されている場合は、期待する結果が得られません。これを処理できる他の方法もありますが、複雑さが増します。

デボンがコメントで述べたように、おそらくfull-text searchを使用して調べるべきです。

+0

私は出力を 'harry potter%is%a%great book'として引用符なしで入力します – Azhar

+1

@Azharは例を更新しました。 –

+0

ありがとう、それは働いた – Azhar

関連する問題