Probleme mit Umlauten

Alles, was PHP betrifft, kann hier besprochen werden.

Probleme mit Umlauten

Postby Tezkatlipoka » 16. September 2008 21:27

Guten Abend zusammen! :D

Ich bin php-Neuling und habe ein kleines Umlaute-Problem. Folgenden Code habe ich geschrieben und als UTF8 abgespeichert:

Code: Select all
<?php
   $str = "Zeichenkette, welche auch ä's, ö's und ü's enthält<br>\n";
   echo $str;
   $str = strtoupper($str);
   echo $str;
   $str = strtolower($str);
   echo $str;
?>


Die Ausgabe im FF3 sieht jedoch folgendermaßen aus:

    Zeichenkette, welche auch ä's, ö's und ü's enthält
    ZEICHENKETTE, WELCHE AUCH ä'S, ö'S UND ü'S ENTHäLT
    zeichenkette, welche auch �'s, �'s und �'s enth�lt


Kann mir jemand einen Tipp geben, was ich falsch mache?

Vielen Dank schon einmal im Voraus!

Gruß
Christoph

P.S.: Ich arbeite mit UEStudio06
Glaube nicht an Wunder - Verlasse Dich darauf.
Woher soll ich wissen was ich denke, ich muss erst hören was ich sage!!
User avatar
Tezkatlipoka
 
Posts: 18
Joined: 14. September 2008 21:35

Postby Xardas der Dunkle » 16. September 2008 21:44

Logisch. PHP ist dafür gedacht Webseiten zu erzeugen, diese werden standardmäßig im Zeichensatz ISO-8859-1 ausgeliefert, d.h. Deutsche Umlaute z.B. existieren nicht.
Dies kann man auf 2 Wege umgehen, der alte Weg der imo für einen Anfänger sogar noch der leichtere ist, die HTML konformen Entities zu verwenden.

Hier ein paar davon:
&auml; ä - &Auml; Ä
&uuml; ü - &Uuml; Ü
&ouml; ö - &Ouml; Ö
&szlig; ß
&gt; >
&lt; <
&amp; &
&quot; "

Für die Umwandlung helfen die beiden php Funktionen: htmlentities und htmlspecialchars

Der andere Weg ist den Zeichensatz zu verändern. Meist kommt hier der Zeichensatz UTF-8 zum Einsatz.
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Postby Tezkatlipoka » 16. September 2008 22:02

da schau an ein Gothic-Fan...sehr erfreut!!! Aber warum Xardas der Dunkle?

Nun aber erstmal Danke für Deine Antwort. Was ich aber dann noch nicht ganz verstehe ist, dass nur in der letzten Zeile die Umlaute nicht dargestellt werden können?!? Hängt das mit dem Kommandos
Code: Select all
strtolower / strtoupper
zusammen?

Mit den Entities sieht's nämlich so aus:

    Zeichenkette, welche auch ä's, ü's und ö's enthält
    ZEICHENKETTE, WELCHE AUCH &AUML;'S, &UUML;'S UND &OUML;'S ENTH&AUML;LT
    zeichenkette, welche auch ä's, ü's und ö's enthält


Also denke ich mir, muss ich den Zeichensatz ändern.
Glaube nicht an Wunder - Verlasse Dich darauf.
Woher soll ich wissen was ich denke, ich muss erst hören was ich sage!!
User avatar
Tezkatlipoka
 
Posts: 18
Joined: 14. September 2008 21:35

Postby Nobbie » 17. September 2008 10:47

Das Problem ist wesentlich komplexer und wie immer solltest Du dazu die Doku nachlesen: http://de.php.net/manual/de/function.strtoupper.php bzw. http://de.php.net/manual/de/function.strtolower.php

Damit diese Funktion überhaupt Buchstaben "erkennt" (was für Dich im Editor anscheinend selbstverständlich ist, ist für ein PHP Script und eine Funktion darin keinesfalls selbstverständlich, denn Buchstaben und Ziffern sind intern nur Bitmuster) und die entsprechenden Gross-Klein-Konvertierungen durchführen kann, muss sie wissen, welcher Zeichensatz auf dem System eingestellt ist.

Dazu benutzt PHP (und diese Stringfunktionen) den Wert aus der sog. "locale" Einstellung. Diese Einstellung kann mit der Funktion setlocale() gesetzt werden, siehe http://de.php.net/manual/de/function.setlocale.php

Das ganze ist ein ziemlich komplexes Thema, weswegen es speziell bei Umlauten immer wieder zur Problemen kommt, weil das Zusammenspiel zwischen benutztem Zeichensatz (das ist hier der Zeichensatz, den Du im Editor angegeben hast) und eingestelltem nicht richtig konfiguriert ist.

Wenn die locale-Einstellung exakt übereinstimmt mit den Zeichensatzeinstellungen im Editor und mit dem gewählten Zeichensatz im HTML-Dokument (wird über META-TAG gesteuert), dann funktioniert auch die Darstellung der deutschen Umlaute richtig. Offensichtlich ist das bei Dir nicht der Fall.

Xardas der Dunkle wrote:Logisch. PHP ist dafür gedacht Webseiten zu erzeugen, diese werden standardmäßig im Zeichensatz ISO-8859-1 ausgeliefert, d.h. Deutsche Umlaute z.B. existieren nicht.


Sorry, aber das ist doppelt falsch. Erstens ist auch bei PHP der Zeichensatz frei wählbar, und zweitens sind selbstverständlich im Zeichensatz ISO-8859-1 (Westeuropäisch bzw Latin-1) auch die deutschen Umlaute enthalten. Beispielsweise entspricht das kleine 'ä' dem Hexwert 0xe4. Eine vollständige Darstellung des Zeichensatzes ISO-8859-1 findest Du u.a. auf http://de.wikipedia.org/wiki/ISO_8859-1

Das Problem liegt (wie o.g.) am Zusammenspiel mit der Einstellung der "locale".
Nobbie
 
Posts: 8775
Joined: 09. March 2008 13:04

Postby Tezkatlipoka » 17. September 2008 16:04

Vielen Dank!
Glaube nicht an Wunder - Verlasse Dich darauf.
Woher soll ich wissen was ich denke, ich muss erst hören was ich sage!!
User avatar
Tezkatlipoka
 
Posts: 18
Joined: 14. September 2008 21:35


Return to PHP

Who is online

Users browsing this forum: No registered users and 4 guests