Ankündigung

Einklappen
Keine Ankündigung bisher.

Suche ohne Groß-/Kleinschreibung

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • pfump
    hat ein Thema erstellt Suche ohne Groß-/Kleinschreibung.

    Suche ohne Groß-/Kleinschreibung

    Hallo,

    ich hab da ein kleines Problem. Und zwar geht es um die Suche.
    Ich habe ein Suchformular erstellt. Dort gibt man einen Suchbegriff ein
    und wenn man will eine Kategorie.

    Danach wird die Suche ausgeführt. Mein Quelltext sieht so aus:
    PHP-Code:
    $sql="SELECT id, name, Kategorie, art, beschreibung FROM tips WHERE (name LIKE '%$suchwort%' OR beschreibung LIKE '%$suchwort%')";
    if(
    $art!="0"$sql.= "AND art LIKE '%$art%'"
    Jetzt ist mir aber ein Problem aufgefallen.
    Und zwar mit der Groß- und Kleinschreibung. Suche ich z.B. nach "sie",
    wird nur ein DS gefunden. Suche ich aber nach "Sie", so sind es 4.

    Scheinbar liegt das an der Schreibweise.
    Hat jemand ne Idee was da falsch läuft?

  • pfump
    antwortet
    Hallo.
    Erst mal vielen Dank für die Hilfe

    Ich hatte schon mal auf utf8_general_ci umgestellt.
    Aber leider brachte das das selbe Ergebnis.
    Liegt wohl am LIKE.

    Einen Kommentar schreiben:


  • Asipak
    antwortet
    Ja, das war gemeint.

    Beim Vergleich könntest du dir - wie gesagt - den Umweg über strtolower() sparen, wenn du anstelle von utf8_bin z.B. utf8_unicode_ci als Kollation wählen würdest.

    Einen Kommentar schreiben:


  • pfump
    antwortet
    Also ich hab das jetzt so geschrieben:

    PHP-Code:
    preg_replace("#($ersatz)#ui","<span style='font-weight:bold;background-color:yellow;'>\\0</span>",htmlspecialchars($row2["name"])) 
    Das scheint auch zu funktionieren

    Einen Kommentar schreiben:


  • pfump
    antwortet
    Meine Datenbank hat als Kollation utf8_bin.
    Brauch ich dann das mysql_set_charset() überhaupt?

    Was meinst du mit
    u-Modifier? Wo setze ich den ein?

    Einen Kommentar schreiben:


  • Asipak
    antwortet
    Hast du auch den Zeichensatz für die Datenbankverbindung mit Hilfe von mysql_set_charset() auf utf8 gesetzt?

    Vermutlich kann dir auch der u-Modifier helfen.

    Einen Kommentar schreiben:


  • pfump
    antwortet
    Also das mit den Umlauten funktioniert jetzt.
    Jetzt ist aber das Problem, das wenn ich nach öffnen suche,
    alle Einträge die öffnen oder Öffnen enthalten gefunden werden. Soweit so gut.
    Jetzt will ich aber das das Suchwort farblich hervorgehoben wird. Das mache ich so:
    PHP-Code:
    preg_replace("#($suchwort)#i","<span style='font-weight:bold;background-color:yellow;'>\\0</span>",htmlspecialchars($row2["name"])) 
    Das funktioniert auch an sich wunderbar. Nur bei den Umlauten nicht.
    Suchwort = "öffnen"
    Fehlende Hervorhebung bei "Öffnen"

    Wenn kein Umlaut vorhanden ist, funktioniert es.

    Einen Kommentar schreiben:


  • Asipak
    antwortet
    Wohl eher am strtolower().

    PHP: mb_strtolower - Manual

    Ebenfalls brauchbar: http://de.php.net/mysql_set_charset.

    Einen Kommentar schreiben:


  • pfump
    antwortet
    Es gibt doch noch ein Problem.
    Und zwar wenn ich als Suchwort z.B. öffnen eingebe.
    Dann wird nichts gefunden, obwohl öffnen vorkommt.
    Ich hab mir mein sql Statement mal ausgeben lassen:
    Code:
    SELECT id, name, Kategorie, art, beschreibung FROM tips WHERE  ((LOWER(name) LIKE '%�ffnen%' OR LOWER(beschreibung) LIKE '%�ffnen%'))
    Obwohl ich
    PHP-Code:
    header('Content-Type: text/html; charset=utf-8');
    <
    meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    angegeben habe.
    Oder liegt das am POST?

    Einen Kommentar schreiben:


  • pfump
    antwortet
    Also ich hab das jetzt so:

    PHP-Code:
    $suchwort=strtolower($suchwort);

    $sql="SELECT id, name, Kategorie, art, beschreibung FROM tips WHERE ((LOWER(name) LIKE '%$suchwort%' OR LOWER(beschreibung) LIKE '%$suchwort%')";
    if(
    $art!="0"$sql.= "AND (art LIKE '%$art%')";  
    $sql.=")"
    Jetzt ist es aber genau umgekehrt. Also gebe ich sie ein werden 4 Ds gefunden, gebe ich Sie ein gar keiner

    Hat sich erledigt. Hatte einen Schreibfehler drin
    Vielen Dank für die Hilfe. Jetzt klappts

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Zitat von Asipak Beitrag anzeigen
    Du könntest eine Kollation mit der Endung _ci auswählen (case insensitive), z.B. utf8_unicode_ci.
    Interessante Sache, schon wieder was neues gelernt..!
    Frage: Kann man die Collation einfach "mal so" bei einer gefüllten Tabelle umstellen, oder ist da mehr notwendig?


    Zitat von pfump Beitrag anzeigen
    Danach wird die Suche ausgeführt. Mein Quelltext sieht so aus:
    PHP-Code:
    $sql="SELECT id, name, Kategorie, art, beschreibung FROM tips WHERE (name LIKE '%$suchwort%' OR beschreibung LIKE '%$suchwort%')";
    if(
    $art!="0"$sql.= "AND art LIKE '%$art%'"
    Die Vergleiche in der Datenbank beim LIKE sind Case-Sensitiv. Also "Sie" != "sie".

    Eine alternative Lösung (zu der von @Asipak) wäre es, alle Vergeichswerte temporär entweder auf Gross- oder Kleinschrift umzuwandeln.

    Beispiel für Umwandlung auf klein...

    PHP-Code:
    $suchwort strtolower($suchwort);
    $art strtolower($art);

    $sql="SELECT id, name, Kategorie, art, beschreibung FROM tips WHERE (LOWER(name) LIKE '%$suchwort%' OR LOWER(beschreibung) LIKE '%$suchwort%')";
    if(
    $art!="0"$sql.= "AND LOWER(art) LIKE '%$art%'"
    so, hoffe mich nicht vertippt zu haben..

    Grüße
    Thomas

    Einen Kommentar schreiben:


  • Asipak
    antwortet
    Du könntest eine Kollation mit der Endung _ci auswählen (case insensitive), z.B. utf8_unicode_ci.

    Einen Kommentar schreiben:

Lädt...
X