Zeichenkodierung
Pater
- php
0 ChrisB0 Tom0 Pater
0 Gunnar Bittersmann
Einen schoenen sonnigen Nachmittag,
ich dachte immer, dass mich das Kaempfen mit den Zeichensaetzen nie betreffen wird, aber jetzt ist es doch geschehen...
Ich habe eine Textdatei die (ganz sicher) in UTF-8 kodiert ist. In meiner php-Datei ist per header() und charset auch UTF-8 festgelegt. Trotzdem wird bei echo mb_internal_encoding();
ein "ISO-8859-1" ausgegeben. Aber egal, dass wird per mb_internal_encoding("UTF-8");
behoben.
In der Datei sind Keywoerter, aus denen eine Navigation aufgebaut werden soll. Diese Navigation besteht aus einem Array aus den ersten Buchstaben jedes Keywords, welches per array_unique gereinigt wird.
Beispiel:
Ameise, Apfel, Baum, Krankenhaus.
Navigation:
A B K
Das Problem ist, dass die Keywords auch mit Umlauten beginnen. Eigentlich duerfte das wegen der UTF-8 Kodierung kein Problem sein.
for($j=0;$j<count($keywords)+1;$j++){
$bla[$j]=substr(strtoupper(trim($keywords[$j])),0,1);
}
$bla=array_unique($bla);
var_dump zeigt, dass es eigentlich richtig ist, trotzdem krieg ich diese Fragezeichen innerhalb einer Raute an der Stelle, wo eigentlich Umlaute sein sollten.
Wenn ich jetzt substr durch mb_substr($keywords[$j],0,1,'UTF-8') ersetze, bekomme ich andere merkwuerdige Zeichen.
Ich hoffe, dass mir jemand das Thema Zeichenkodierung wenigstens ein bisschen naeherbringen kann.
Gruss,
der Pater
Hi,
Das Problem ist, dass die Keywords auch mit Umlauten beginnen. Eigentlich duerfte das wegen der UTF-8 Kodierung kein Problem sein.
Es wird zum Problem, wenn du nicht berücksichtigst, dass UTF-8 Zeichen ggf. in mehreren Bytes kodiert, und dass die normalen Stringfunktionen von PHP damit nicht korrekt umgehen.
for($j=0;$j<count($keywords)+1;$j++){
$bla[$j]=substr(strtoupper(trim($keywords[$j])),0,1);
Du schneidest hier ein einzelnes Byte aus einem String aus, obwohl du eigentlich ein Zeichen ausschneiden willst.
Nutze die mbstring-Funktionen.
MfG ChrisB
--
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
Hallo
Nutze die mbstring-Funktionen.
auch hier mein Hinweis, Postings genau lesen ;)
Habe mb_substr benutzt, Umlaute sind trotzdem nicht dargestellt
mfg Pater
Hello,
Nutze die mbstring-Funktionen.
auch hier mein Hinweis, Postings genau lesen ;)
Nur hier _mein_ Hinweis.
Immer relevante Codeteile senden und nicht nur unzureichende Ausschnitte.
Vermutlich müsstest Du auch mb_strtoupper() benutzen, aber den Teil des Codes zeigst Du ja gar nicht erst.
http://de3.php.net/manual/en/function.mb-strtoupper.php
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi,
Nur hier _mein_ Hinweis.
Immer relevante Codeteile senden und nicht nur unzureichende Ausschnitte.
Vermutlich müsstest Du auch mb_strtoupper() benutzen, aber den Teil des Codes zeigst Du ja gar nicht erst.
da war ich wohl zu voreilig mit dem Verurteilen ;) Ich hab doch den Codeteil mit strtoupper() gezeigt?
Aber Vielen Dank, es funktioniert jetzt wunderbar, ich haette vllt das Manual zuerst noch sorgfaeltiger konsultieren sollen.
ein gluecklicher Pater
Hello Peter,
In der Datei sind Keywoerter, aus denen eine Navigation aufgebaut werden soll. Diese Navigation besteht aus einem Array aus den ersten Buchstaben jedes Keywords, welches per array_unique gereinigt wird.
Beispiel:
Ameise, Apfel, Baum, Krankenhaus.Navigation:
A B KDas Problem ist, dass die Keywords auch mit Umlauten beginnen. Eigentlich duerfte das wegen der UTF-8 Kodierung kein Problem sein.
[code lang=php]for($j=0;$j<count($keywords)+1;$j++){
$bla[$j]=substr(strtoupper(trim($keywords[$j])),0,1);
Und was für eine Funktion benutzt Du da gerade für den Teiltext?
Ist die auch bestimmt aus der Gruppe der multibytefähigen Funktionen?
N E I N ;-P
siehe mb_substr()
http://de3.php.net/manual/en/function.mb-substr.php
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Und was für eine Funktion benutzt Du da gerade für den Teiltext?
Ist die auch bestimmt aus der Gruppe der multibytefähigen Funktionen?N E I N ;-P
siehe mb_substr()
http://de3.php.net/manual/en/function.mb-substr.php
Ich verweise mal ganz dreist auf meinen Post, der offenbar nicht ganz zu Ende gelesen wurde.
Ich habe testweise auch mb_substr eingesetzt, das gleiche Ergebnis, die Umlaute werden nicht korrekt angezeigt.
Pater, nicht Peter ;)
@@Pater:
nuqneH
ich dachte immer, dass mich das Kaempfen mit den Zeichensaetzen nie betreffen wird, aber jetzt ist es doch geschehen...
Stimmt. Dein Zeichensatz scheint kein 'ä' zu enthalten.
Ich habe eine Textdatei die (ganz sicher) in UTF-8 kodiert ist.
Richtig, UTF-8 ist eine Zeichen_codierung_, kein Zeichen_satz_. Es ist essentiell, beides zu unterscheiden.
Ich hoffe, dass mir jemand das Thema Zeichenkodierung wenigstens ein bisschen naeherbringen kann.
Zeichencodierung für Anfänger
Zeichencodierungen: grundlegende Konzepte
Umgang mit Zeichencodierungen in HTML und CSS
Qapla'