Zur Navigation

Umlaute per str_replace umschreiben

1 Horst_Braun

Hallo,

ich habe jetzt lang selber gebastelt, aber nicht gelöst.

Ich lese aus einem Datenbankfeld (latin1_swedish_ci) einen String aus. Dort ersetze ich verschiedene Elemente wie folgt:
strtolower(str_replace(array('(',')','.',' - ',' & ',' & ',' ', ':'),array('','','','-','-','-','-', ''),trim ($listprice[0])))
Das geht alles. Aber ich möchte noch ä ö ü in ae usw. umwandelt. Also hab ich die noch mit rein genommen:
strtolower(str_replace(array('ä','ö','ü','(',')','.',' - ',' & ',' & ',' ', ':'),array('ae','oe','ue','','','','-','-','-','-', ''),trim ($listprice[0])))
Geht nicht. Ich habe auch schon ä probiert.

Das ist doch bestimmt ein Codierproblem, oder?

25.10.2013 22:19

2 Jörg Kruse

Was geht nicht, strtolower() oder str_replace()?

Ich lese aus einem Datenbankfeld (latin1_swedish_ci) einen String aus

Maßgeblich kann noch der Zeichensatz der Datenbankverbindung sein (der z.B. mittels mysql_set_charset() oder über "SET NAMES" festgelegt sein könnte).

Die betreffende PHP-Datei muss dann in derselben Kodierung gespeichert sein.

strtolower() funktioniert hinsichtlich Umlauten nur korrekt, wenn die Spracheinstellung des Servers entprechend eingestellt ist. Ansonsten kommt man mit mb_strtolower() und dessen zweiten Parameter für Encoding weiter.

25.10.2013 22:39 | geändert: 25.10.2013 22:40

3 Horst_Braun

str_replace() scheint keine Umlaute zu finden. die bleiben einfach im String stehen.

Muss ich das Datenbankfeld auf utf-8 umstellen?

25.10.2013 22:47

4 Jörg Kruse

Ich würde eher die Kodierung der PHP-Datei ändern. Bei einer Änderung der Kodierung des Datenbankfeldes musst du möglicherweise weitere PHP- und HTML-Dateien anpassen und wenn du nur die Kodierung eines einzelnen Datenbankfeldes änderst, kann es zudem bei manchen Queries zu "illegal mix of collations" Problemen kommen.

25.10.2013 23:07

5 Horst_Braun

Nur die Variable mit utf8_encode()?? Oder?

25.10.2013 23:36

6 Jörg Kruse

Ich meinte, dass du die PHP-Datei, die diesen Code enthält, in der passenden Codierung abspeicherst ("Abspeichern unter ..." und dann Zeichensatz auswählen)

Du kannst es aber auch mit utf8_encode() versuchen, wenn die aktuelle Codierung der Datei UTF-8 ist und du dies beibehalten möchtest. Wobei du dann wegen des Arrays jeden Buchstaben einzeln behandeln müsstest, was IMHO nicht so schön ausschaut:

array(utf8_encode('ä'),utf8_encode('ö'),utf8_encode('ü'))

25.10.2013 23:54 | geändert: 25.10.2013 23:55

7 Horst_Braun

Hallo,

bin erst jetzt dazu gekommen. Es gibt im Notepad++ ein "Konvertieren zu.."
Dann geht es.

Wie immer saubere Arbeit. Schnelle Hilfe. Danke.

Ich werde euch demnächst mal meine Seite vorstellen, wenn alles sauber läuft.

26.10.2013 17:07

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]