Problem mit Umlauten bei einer SQL Abfrage, hat jemand eine Idee?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Deine PHP-Datei ist wie abgespeichert (Zeichensatz)?

Deine HTML-Seite lautet auf welchen Zeichensatz (Meta-Tag usw.)?

Deine Datenbankverbindung lautet auf welchem Zeichensatz (set names)?

Die Datensätze sind korrekt in der DB drin, wurden also wirklich als utf8 angelegt und übergeben (siehe beispielsweise mysql-kommandozeile)?

Die Like-Suche ist im übrigen KEINE phonetische Suche. Wenn in der Datenbank "müller" steht, wird die Suche nach "mueller" niemals ein Ergebnis liefern.

MoechteAWissen 
Fragesteller
 30.12.2015, 11:25

Vielen Dank für deine Antwort!

Gleich vorab, ich bin blutiger Anfänger auf dem Gebiet. Um
genau zu sein, reden wir von meinem 1. Script. Ich hoffe, Du bist nachsichtig
mit mir….

Deine PHP-Datei ist wie abgespeichert (Zeichensatz)?

JA

Deine HTML-Seite lautet auf welchen Zeichensatz
(Meta-Tag usw.)?

<meta charset="utf-8">

Zusätzlich binde ich mit PHP
folgendes ein:

header("Content-Type: text/html; charset=utf-8"); 

Die Datensätze sind korrekt in der DB drin,
wurden also wirklich als utf8 angelegt und übergeben (siehe beispielsweise mysql-kommandozeile)?

Verstehe nicht genau was Du damit meinst. Also die Umlaute werden korrekt in der DB abgespeichert. Ich musste diesen Befehl  dafür einfügen:

mysql_query("SET NAMES 'utf8'");

Die Like-Suche ist im übrigen
KEINE phonetische Suche. Wenn in der Datenbank "müller" steht, wird die Suche nach "mueller" niemals ein Ergebnis liefern.

Und wie löse ich dieses Problemchen? ;-)

0
mepeisen  30.12.2015, 12:03
@MoechteAWissen

ich bin blutiger Anfänger auf dem Gebiet

Macht nichts, deswegen die Fragen ;-)

So wie du diese Fragen beantwortet hast, sollte es zunächst grundsätzlich klappen. Also hinsichtlich der Abfrage auf den exakt richtigen Wert. Wichtig ist, dass wirklich von Anfang bis Ende, also sowohl im HTML/Header (-> Browser), als auch im PHP-Script, als auch in der Datenbankverbindung (Set Names) als auch in der Tabelle (Collation) alles auf UTF8 steht. Ansonsten sucht man sich dumm und dusselig.

Wenn du die Datensätze abfragst und als einfache Tabelle in der Webseite abfragst, siehst es dann korrekt aus oder sieht der Umlaut kaputt aus?

Und wie löse ich dieses Problemchen? ;-)

Indem du Google bedienen lernst ;-)

Gleich der erste Suchtreffer für "mysql phonetische Suche" führt mich zu folgendem interessanten Forumseintrag: https://www.tutorials.de/threads/php-mysql-aehnlichkeitssuche-meinten-sie.360632/

1
MoechteAWissen 
Fragesteller
 30.12.2015, 12:16
@mepeisen

Hoffentlich habe ich mich nicht falsch ausgedrückt….

Die Umlaute werden richtig angezeigt.
Was nicht funktioniert ist, dass Wörter die ein Umlaut beinhalten
nicht gefunden (ausgegeben) werden.

0
MoechteAWissen 
Fragesteller
 30.12.2015, 13:25
@MoechteAWissen

Ich habe es!
Es war etwas ganz anderes.

Der Fehler entstand, da ich
einen Befehl falsch verwendete

Ich schrieb:

$suche = preg_replace ("#[^0-9a-z]#i","", $suche);

Damit wurde alles, außer Wörter mit Umlauten ausgegeben.

So funktioniert es:

$suche = preg_replace ("#[^0-9a-zäÄüÜöÖß]#i " ," " , $suche);

Vielen Dank an   die helfen wollten  :-) 

0
mepeisen  30.12.2015, 14:26
@MoechteAWissen

Nutze bitte Zeichenklassen statt "0-9a-zäÄüÜöÖß".

Beispielsweise \w

siehe auch https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck#Vordefinierte_Zeichenklassen

Dann wird es auch mit "exotischen Zeichen" zurechtkommen, beispielsweise diesen Strichen, die Franzosen gerne über die Buchstaben malen oder den Kringeln aus dem nordischen Raum oder oder. Der Modifier "u" zusätzlich zum "i" bewirkt, dass dein Regex als Unicode interpretiert wird :-)

1

Versuch mal die Variable String umzuändern:

$string = utf8_encode($string);
Und dann mach die Abfrage nochmal
MoechteAWissen 
Fragesteller
 30.12.2015, 10:02

bringt leider nichts 

0

Müller, Mueller, vielleicht auch Miller, Möller, ... nicht so trivial. google mal nach levenshtein