• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Alles auf UTF-8, dennoch Probleme

Status
Für weitere Antworten geschlossen.

Voodoo

Mitglied
Hallo liebe Forengemeinde,

ich habe da ein kleineres Problem mit dem SEO einer URI.
Also: Die Daten werden aus der DB gezogen. Alle Spalten stehen auf utf8_unicode_ci. Jetzt sollen Umlaute durch Umschreibungen wie ae statt ä usw. ersetzt werden.
Ich hatte folgende Funktion:
PHP:
function doseo($text) {
    $a = array("#ä#","#ö#","#ü#","#ß#"," ","#[^a-z0-9\-]#");
    $b = array("ae","oe","ue","ss","-","");
    return preg_replace($a,$b,strtolower($text));
}
Wenn ich jetzt "Du könntest ja auch mal was vorschlagen!" als Text übergebe erhalte ich "du-knntest-ja-auch-mal-was-vorschlagen".
Scheinbar wird das ö nicht erkannt und fällt somit im letzten Schritt weg. Aber wieso? Alles ist UTF-8 codiert - auch das Dokument.

Ich hoffe auf eine Idee :-o

Gruß
Voodoo
 
Werbung:
schein wohl darauf hinzudeuten, dass preg replace den array von hinten nach vorne durchgeht... schonmal andersrum versucht? ^^
 
Ne^^
Das wird es wahrscheinlich auch eher nicht sein. Denn sonst würden Leerzeichen ja auch bereits hinten aussortiert und nicht durch Bindestriche ersetzte werden.

Gruß
Voodoo
 
Werbung:
PHP:
function doseo($text) {
    $text = strtolower($text);
    $text = str_replace(array('ä', 'ö', 'ü', 'ß', ' '),
                        array('ae', 'oe', 'ue', 'ss', '-'),
                        $text);
    return preg_replace('#[^a-z0-9\-]#', null,$text);
}
 
Mit str_replace hab ichs auch schon versucht. Gleiches Problem.
Übrigens:
Wenn ich das letzte Pattern zu '#[^a-z0-9\-ö]#' erweiter, erhalte ich: du-k�nntest-ja-auch-mal-was-vorschlagen

Das ö scheint da also erkannt zu werden und dennoch wird es bei der Ausgabe nur als Fragezeichen dargestellt. Das Charset wird also irgendwo geändert oder... irgendwas. Nur wo? Und wieso?
 
Moin

Probiere mal vor dem eigentlichen Querry noch SET NAMES 'utf-8' an die Datenbank zu senden. Andernfalls könntest du mal versuchen mit utf8_encode() bzw. utf8_decode() weiter zu kommen.

MfG

NewLord
 
Werbung:
Tach auch,

ersteres hatte ich schon vorher drin und mit utf8_de/encode konnte ich leider keine Erfolge erzielen.
Komische Sache.

Gruß
Voodoo
 
PHP:
preg_replace(array('/\xF6/', '/\xE4/', '/\xFC/'), array('oe', 'ae', 'ue'), $text);
so schon versucht? ^^
 
Nein noch nicht. Jetzt aber schon. Funktioniert leider auch nicht.
Aber... ich habe jetzt die Lösung!
Es funktioniert, wenn man die Umlaute in eine Untergruppe packt:
Code:
#[ö]#
So richtig kann ich mir das nicht erklären. Aber so lange es funktioniert. :)

Gruß
Voodoo
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben