[PHP] Stapelverarbeitung Umwandlung Zeichencodierung in utf-8

Ufisch

Well-known member
30 April 2006
507
41
Hallo zusammen,

ich habe gerade das Problem, dass ich meine Webseite auf UTF-8 Codierung umgestellt habe. Allerdings müsste ich jetzt jede Datei öffnen und als utf-8 abspeichern. Gibt es da nicht vielleicht ein Programm, welches das bei allen Dateien automatisch macht? Wäre nämlich echt super.

Ich kann davor die Datenbank noch nicht umstellen, weil es sonst nur Probleme gibt.

LG Ufisch
 
Danke, aber ich will meine ganzen Dateien in UTF-8 haben. Das ist das Problem. Es werden mir überall ? angezeigt, wo ich die Dateien noch nicht auf UTF-8 umgestellt habe.
 
einfach den inhalt des ordners rekursiv auslesen und dann mit einer schleife über alle dateien die funktion anwenden. sollte keine große sachen sein.

stumpi
 
Danke und sry, dass ich erst jetzt antworte.

Kannst du mir noch sagen wie ich das am blödsten mache? Wenn möglich will auch gleich alle Unterverzeichnisse in einem Schritt miterledigen.

Ich habe vorhin ein Programm gefunden, mit dem man das per Commandozeile machen kann. Allerdings ist das irgendwie nicht zuverlässig. Bei manchen wandelt es den Zeichensatz einfach nicht um, obwohl das Änderungsdatum der Datei aktualisiert wird.

Vielleicht habe ich ja dann mit dem php-script mehr Erfolg.
 
Naja, wie soll das schon gehen?
Mit scandir() den Inhalt des Verzeichnisses auslesen und Schritt für Schritt durchgehen: Wenn PHP/HTML -> in UTF8 umwandeln, wenn Ordner -> von vorne anfangen (scandir...).
Um eine beliebige Ordnertiefe zu erreichen, musst du das ganze in eine Funktion packen, die sich dann selbst aufruft (auch Rekursion genannt). Alternativ könntest du dir per exec('find /pfad/zum/ordner/ -type f') (nur als Beispiel, bin Linux-noob) dir direkt rekursiv alle Dateien auflisten lassen, wenn exec() nicht deaktiviert ist.
 
Ok, habe mal was gebastelt.

Allerdings glaube ich, dass mir das gar nicht viel bringt. Mit utf8_encode konvertiert er ja den Inhalt. Die Datei ansich soll aber utf8 sein.
 
Cool, hast recht. Es funktioniert.

Jetzt muss ich das noch so hinbasteln, dass er alle Unterordner selbstständig durchgeht.

Wie kann ich abfragen, ob es ein Ordner ist?
 
Was hindert dich daran, dich an diesem Codebeispiel zu orientieren?

Ich denke nichts, habe ich mir nur nicht groß angeschaut.

Jedenfalls habe ich schon was funktionierendes gebastelt.

Allerdings habe ich jetzt selbes Problem wie oben beschrieben, dass manche Dateien bzw. deren Inhalt einfach nicht komplett utf-8 werden will.
An was kann das liegen? Ich müsste ja diese dann manuell konvertieren.

So, jetzt zum nächsten Problem. Bei manchen Dateien bewirkt das das Gegenteil. Es ist zwar hinterher utf-8, allerdings sind die Umlaute beispielsweise so gespeichert: ü
Und jedesmal wenn ich das Script drüberlaufen lasse, kommt ein solches weiteres Zeichen an dieser Stelle hinzu.
Kann das sein, dass es Probleme gibt, wenn man auf bereits utf-8 codierten nhalt diese Funktion anwendet?

*edit: jup, sieht fast so aus. Also muss ich erst checken, ob die Datei schon utf-8 ist. Geht das?
 
Zuletzt bearbeitet:
Ich habe etwas rausbekommen. Dateien, in denen keine Sonderzeichen vorkommen, werden nicht umgewandelt, d.h. der es bleibt bei ANSI. Liegt wahrscheinlich daran, dass er die Dateien ohne BOM schreibt, oder?
Kann man das irgendwie erzwingen, dass der Inhalt trotzdem als utf-8 gespeichert wird?

Und dann ist noch wichtig, dass das Script filtert, ob eine datei schon in utf-8 ist. Weil wie oben schon beschrieben, gibt das sonst nen Chaos. Habe leider noch keine passende Funktion gefunden (Ich hoffe, die gibt es).
Oder ich muss nach der Umwandlung nach ü usw. suchen und wenn eines vorkommt, dann soll er die Datei nicht speichern ^^