Warum sind Umlaute in UTF-8 zwei Zeichen lang?
philosapiens
- php
0 Der Martin
0 philosapiens0 dedlfix
0 philosapiens0 dedlfix
2 Gunnar Bittersmann
0 dedlfix
Hi,
leider habe ich in einem anderem Forum noch keine abschließende Hilfe erhalten.
Direktlink zu meinem Post in diesem Forum
Das Thema hier noch einmal in aller Kürze:
Ich habe meine Seite auf UTF-8 umgestellt und es wird alles prima angezeigt! Ich habe die Suchfunktion von Fritz Weisshart installiert. Dort gibt es ein Syntax Highlighting mit JavaScript. Das funktioniert nicht mit Umlauten, ansonsten schon.
Nach vielen Selbstversuchen komme ich zu der begründeten Vermutung, dass die Umlaute nun in UTF-8 eine Zeichenlänge von zwei Zeichen haben.
Kann das sein?
Könnte ich das anpassen?
Hier meine Seite mit der Suchfunktion zum Testen.
Vielen Dank für Eure Gedanken!
philosapiens
Hallo,
Nach vielen Selbstversuchen komme ich zu der begründeten Vermutung, dass die Umlaute nun in UTF-8 eine Zeichenlänge von zwei Zeichen haben.
Kann das sein?
ja, das ist so definiert.
UTF-8 codiert alle Zeichen mit Codes >0x7F mit zwei oder mehr Bytes.
Könnte ich das anpassen?
Was? Das Verhalten von UTF-8? Nein.
Was man in den jeweiligen Scripts ändern müsste, um sie UTF-8-tauglich zu machen, sieht man erst, wenn man sich die mal anschaut. Ich fürchte aber, wenn es mit Dingen wie UTF-8 schon Probleme gibt, schlummern da noch ganz andere Probleme, von denen du noch gar nichts ahnst.
Wie alt ist das Script, was du da verwendest?
So long,
Martin
Hi,
Ja, das Script ist für ISO-8859 geschrieben.
Das Script ist in seiner freien Version verschlüsselt, daher kann ich hier leider den Code nicht posten.
Aktuell überlege ich gerade nach einem Tipp die Multibyte String Funktionen von PHP zu verwenden.
Könnte es funktionieren, dass ich einfach nur alle in der Liste von dem Link aufgeführten mb_ - Funktionen in dem Script suche und diese ersetze?
Ich meine beispielsweise aus substr()
mb_substr()
zu machen?
Danke philosapiens
Hi!
Könnte es funktionieren, dass ich einfach nur alle in der Liste von dem Link aufgeführten mb_ - Funktionen in dem Script suche und diese ersetze?
Jein. Zum einen musst du mindestens noch der mb-Extension mitteilen, welche Kodierung sie zu bearbeiten hat (mb_internal_encoding()).
Ich meine beispielsweise aus
substr()
mb_substr()
zu machen?
Und zum anderen gibt es nicht für jede String-Funktion ein mb-Pendant.
Lo!
Hi,
also via php liefere ich mit den header-Angaben auch gleich mb_internal_encoding('utf-8');
aus.
Also Du meinst, das es zumindest gehen könnte?
Ich meine, dass durch eine solche "Anpassung" die Zeichenlänge bzw. Byte-Anzahl zum farbigen Markieren nicht mehr zu stören könnte?
Hier einmal für alle eifrigen Mitleser der Link zu dem besagten Suchscript.
Wir lesen uns!
philosapiens
Hi!
also via php liefere ich mit den header-Angaben auch gleich
mb_internal_encoding('utf-8');
aus.
Das hat nichts mit ausliefern zu tun, das ist eine Information an die mb-Extension, dass sie mit UTF-8 zu arbeiten hat. Sie kann das nämlich auch noch mit einer Reihe weiterer Kodierungen. Und wenn man ihr nicht sagt, was sie nehmen soll, macht sie prinzipbedingt Mist. Kodierungen lassen sich programmatisch nicht zweifelsfrei erraten.
Also Du meinst, das es zumindest gehen könnte?
Zu den Erfolgschancen meine ich gar nichts. Ich weise dich nur auf das hin, worauf du achten musst (soweit es mir bekannt ist und gerade einfällt), wenn du dich an die Umgestaltung machst.
Ich meine, dass durch eine solche "Anpassung" die Zeichenlänge bzw. Byte-Anzahl zum farbigen Markieren nicht mehr zu stören könnte?
Stören ist das falsche Wort. Die beteiligten Komponenten müssen mit der zu verarbeitenden Kodierung umgehen können. Genauso, wie ihnen bisher beigebracht wurde, mit ISO-8859-1 umgehen zu können, muss ihnen beigebracht werden, mit UTF-8 umgehen zu können.
Lo!
@@philosapiens:
nuqneH
Nach vielen Selbstversuchen komme ich zu der begründeten Vermutung, dass die Umlaute nun in UTF-8 eine Zeichenlänge von zwei Zeichen haben.
Kann das sein?
Nein, Umlaute haben wie alle anderen Zeichen die Zeichenlänge von einem Zeichen.
Zeichen werden in UTF-8 aber durch unterschiedlich viele Oktetts (Bytes) codiert. Die Basic-Latin-Zeichen (ASCII-Zeichen) durch ein Byte, deutsche Umlaute durch 2 Bytes, das Euro-Zeichen durch 3 Bytes.
Qapla'
Hi!
Ich habe meine Seite auf UTF-8 umgestellt und es wird alles prima angezeigt!
Das sind noch jede Menge HTML-Entitys in deinen ausgelieferten Texten zu sehen. Das tut für UTF-8 gar nicht mehr Not und für ISO-8859-1 zumindest nicht für die Umlaute.
Ich habe die Suchfunktion von Fritz Weisshart installiert. Dort gibt es ein Syntax Highlighting mit JavaScript. Das funktioniert nicht mit Umlauten, ansonsten schon.
Klär uns™ mal auf, wie diese Teile überhaupt arbeiten, also wer gibt welche Daten wohin und wenn du weißt, auch wie sie intern arbeiten. Sind sie gemäß ihrer Beschreibung für UTF-8 ausgelegt und wie kommen sie mit dem Mischmasch Direktkodierung/Entitys zurecht?
Nach vielen Selbstversuchen komme ich zu der begründeten Vermutung, dass die Umlaute nun in UTF-8 eine Zeichenlänge von zwei Zeichen haben.
Kann das sein?
Das kann nicht nur, das muss so. UTF-8 verwendet bis zu 4 Bytes.
Könnte ich das anpassen?
Nein.
Lo!