Zeichencodierung im Dokument wechseln?
Linuchs
- html
Hallo,
ich bekomme für meine Seiten Inhalte geliefert, die nicht UTF-8 codiert sind. Also kann man die Umlaute nicht lesen.
Ich möchte jetzt nicht 150 Dateien einzeln bearbeiten und umstellen.
Kann man im UTF-8 Dokument einen Container auf ISO-8859-1 umstellen?
Linuchs
Tach!
Kann man im UTF-8 Dokument einen Container auf ISO-8859-1 umstellen?
Nein.
dedlfix.
Liebe Mitdenker, liebe Wissende, liebe Neugierige,
ich bekomme für meine Seiten Inhalte geliefert, die nicht UTF-8 codiert sind. Also kann man die Umlaute nicht lesen.
Ich möchte jetzt nicht 150 Dateien einzeln bearbeiten und umstellen.
Kann man im UTF-8 Dokument einen Container auf ISO-8859-1 umstellen?
Du fügst die doch sowieso mit PHP zusammen. Da gibt es diverse Funktionnen, z.B. http://php.net/manual/en/function.utf8-decode.php
und irgendwo schwirrt auch noch ein "seems_utf8()" rum im Archiv
oder http://php.net/manual/de/function.mb-detect-encoding.php
Spirituelle Grüße
Euer Robert
robert.r@online.de
Moin!
und irgendwo schwirrt auch noch ein "seems_utf8()" rum im Archiv
Ja. Basierend auf der damaligen Diskussion läuft bei mir folgendes zu meiner Zufriedenheit
# Reihenfolge ist wichtig
# eventuell erweitern...
$spek=array('ASCII', 'UTF-16', 'UTF-8', 'ISO-8859-15', 'ISO-8859-1');
$coding = mb_detect_encoding($string, $spek, false);
if ( 'UTF-8' != $coding && 'ASCII' != $coding ) {
$string = "mb_convert_encoding($string, 'UTF-8', $coding);
}
Jörg Reinholz
Lieber Jörg,
Moin!
und irgendwo schwirrt auch noch ein "seems_utf8()" rum im Archiv
Ja. Basierend auf der damaligen Diskussion läuft bei mir folgendes zu meiner Zufriedenheit
# Reihenfolge ist wichtig # eventuell erweitern... $spek=array('ASCII', 'UTF-16', 'UTF-8', 'ISO-8859-15', 'ISO-8859-1'); $coding = mb_detect_encoding($string, $spek, false); if ( 'UTF-8' != $coding && 'ASCII' != $coding ) { $string = "mb_convert_encoding($string, 'UTF-8', $coding); }
Könntest Du bitte noch ein paar Worte darüber verlieren, warum diese Reihenfolge funktioniert, und warum Du das strict-Flag nicht benutzen willst bei der Erkennung?
Spirituelle Grüße
Euer Robert
robert.r@online.de
Moin!
Ja. Basierend auf der damaligen Diskussion läuft bei mir folgendes zu meiner Zufriedenheit
# Reihenfolge ist wichtig # eventuell erweitern... $spek=array('ASCII', 'UTF-16', 'UTF-8', 'ISO-8859-15', 'ISO-8859-1'); $coding = mb_detect_encoding($string, $spek, false); if ( 'UTF-8' != $coding && 'ASCII' != $coding ) { $string = "mb_convert_encoding($string, 'UTF-8', $coding); }
Könntest Du bitte noch ein paar Worte darüber verlieren, warum diese Reihenfolge funktioniert,
Das hat Dedlfix schon sehr ausführlich getan.
und warum Du das strict-Flag nicht benutzen willst bei der Erkennung?
Der strict-Flag steht zum einen per default auf false. Zum anderen ist es aus Gründen der Anwendung (ich ruble die nicht immer sauberen Ausgaben von whois um / siehe "Telefónica Germany GmbH & Co. OHG") im konkreten Fall besser, auch im Fehlerfall (UTF-8 ist nicht valide) irgendein (falsches) Ergebnis zu bekommen als gar keins.
Jörg Reinholz
Du fügst die doch sowieso mit PHP zusammen.
Nein, ich hole *.htm Dateien mit Javascript per Ajax und zeige sie an. Sowas:
<p><b>Absatz 1</b></p>
<p>Der letzte von zwei Absätzen.</p>
Linuchs
Hallo
Nein, ich hole *.htm Dateien mit Javascript per Ajax und zeige sie an. Sowas:
von wo? Von deiner Domain?
Gruß Jürgen
Nein, ich hole *.htm Dateien mit Javascript per Ajax und zeige sie an. Sowas:
Und da gibts keine Möglichkeit das umzuwandeln? Eine Javascript Funktion hab ich so schnell nicht gefunden, aber man kann in AJAX ein Encoding angeben.
Tach!
Nein, ich hole *.htm Dateien mit Javascript per Ajax und zeige sie an. Sowas: Und da gibts keine Möglichkeit das umzuwandeln?
Die Umwandlung nimmt der Browser vor, wenn er das Dokument gemäß der angegebenen Kodierung liest. Diese muss im Content-Type-Header von HTTP angegeben sein. Javascript selbst hat von Kodierung keine Ahnung, das arbeitet immer mit Zeichen, die es vom Browser vorgekaut gereicht bekommt. Deswegen gelten die üblichen Vorgehensweisen, wie man dem Browser die Kodierung von Dokumenten mitteilt.
Das Problem bei Ajax ist, dass oftmals keine kompletten Dokumente übertragen werden und da auch keine meta-Elemente enthalten sind. Deswegen entfällt da die Möglichkeit, die Kodierung im Dokument ersatzweise anzugeben, wenn der Server keine Angabe macht. Der Server ist hier also in der Pflicht, die Angabe zu liefern. Ansonsten raten sich die Browser was zusammen und Javascript kann da nicht eingreifen.
Eine Javascript Funktion hab ich so schnell nicht gefunden, aber man kann in AJAX ein Encoding angeben.
Kann man? Mir ist kein Weg bekannt, den Browser für empfangene Daten in eine bestimmte Kodierung zu zwingen.
dedlfix.
Moin!
Du fügst die doch sowieso mit PHP zusammen. Nein, ich hole *.htm Dateien mit Javascript per Ajax
Linuchs trällert "Wenn der Topf aber nun ein Loch hat..."
Was (zum Teufel!) hindert Dich die Dateien mit php möglichst schon beim Upload durch iconv zu jagen und UTF-8-kodiert abzulegen? Das hier erledigt das für alle Dateien im aktuellen Verzeichnis, die auf .htm enden (blind geschrieben, ungetestet, ohne abgefangene Fehler, nur ein Vorschlag):
$dataDir='.';
# Reihenfolge ist wichtig
# eventuell erweitern...
$spek=array('ASCII', 'UTF-16', 'UTF-8', 'ISO-8859-15', 'ISO-8859-1');
$d = dir($dataDir);
while (false !== ($entry = $d->read())) {
if (
$entry != '..'
&& $entry != '.'
&& substr( $entry, 0, 3 ) != '.ht';
&& substr( $entry, -4, 4 ) == '.htm';
&& file_exists("$dataDir/$entry")
&& is_readable("$dataDir/$entry")
&& is_writable("$dataDir/$entry")
) {
$string = file_get_contents($dataDir/$entry);
$coding = mb_detect_encoding($string, $spek, false);
if ( 'UTF-8' != $coding && 'ASCII' != $coding ) {
$string = mb_convert_encoding($string, 'UTF-8', $coding);
file_put_contents($dataDir/$entry, $string);
}
}
}
$d->close();
Jörg Reinholz
Hallo,
meiner Kenntnis nach ist das nicht möglich bzw. sinnvoll, da die gesamte Seite vom Editor in der passenden Zeichenkodierung gespeichert werden muss:
http://webbausteine.de/blog/tipps/schriftzeichen_richtig_darstellen.php
Gruss
MrMurphy