2016-12-21 8 views
1

Ich bekomme Abfragen, die ich suche in meiner Datenbank mit LIKE-Anweisung in SQL Speicherplatz mit% ersetzt.PHP- Suche mit Anführungszeichen verfeinern

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

Jetzt möchte ich meine Suche verfeinern, indem Benutzer Anführungszeichen zu verwenden, wie Google tut so, dass

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

i diese Räume überspringen wollen, die in Anführungszeichen ist, auch die Abfrage enthalten mehr als ein Anführungszeichen.

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

Was passiert, wenn die Anführungszeichen nicht übereinstimmen? Beispiel ''" Harry Potter "ist ein großartiges" Buch ". Willst du" Harry Potter "oder" Harry Potter "ist ein großes" 'oder' "ist ein großes" '? –

+1

Volltextsuche ist was Sie wollen, nicht Wildcard-Suche. – Devon

+0

@mistermartin nur '" Harry Potter "' und auch die Abfrage kann mehr als ein Paar Anführungszeichen enthalten – Azhar

Antwort

1

ist hier eine schnelle und schmutzige Art und Weise, es zu tun:

$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; 

Dies wird aus:

harry potter%is%a%great book 

Dies ist jedoch bei weitem nicht perfekt. Wenn zum Beispiel der gleiche Ausdruck mehrmals sowohl in Anführungszeichen als auch in Anführungszeichen erscheint, liefert er nicht die Ergebnisse, die Sie erwarten würden. Es gibt andere Möglichkeiten, wie Sie damit umgehen können, aber es fügt nur weitere Komplexität hinzu.

Wie Devon in den Kommentaren erwähnt, sollten Sie wahrscheinlich in der Verwendung eines full-text search suchen.

+0

Ich möchte die Ausgabe als 'Harry Potter% ist% ein% großes Buch' ohne Anführungszeichen – Azhar

+1

@Azhar aktualisiert das Beispiel. –

+0

Danke, es hat funktioniert – Azhar

Verwandte Themen