Immer wieder Zeichensätze
heinetz
- php
Hallo Forum,
bei folgender Konstruktion habe ich mal wieder ein Problem mit den
Sonderzeichen:
form.php:
---------
<?
$_SESSION['Thema'] = $_POST['Thema'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<body>
<form method="post">
<select id="Thema" name="Thema" size="1" style="width:220px;">
<option <?=(($_SESSION['Thema']=="Mitgliedschaft und Beiträge")?'selected':'');?> value="Mitgliedschaft und Beiträge">Mitgliedschaft und Beiträge</option>
</select>
</body>
</html>
Kann mir jemand sagen, an welcher Stelle das Problem auftritt ?
ps. Das ganze ist vereinfacht dargestellt und es gibt Gründe,
das nicht grundlegend anders zu bauen, sondern innerhalb dieser
Konstruktion ein korrektes Zeichensatzhandling verweden.
danke für Tipps und
beste gruesse,
heinetz
hi,
was fürn Problem?
[..]sondern innerhalb dieser
Konstruktion ein korrektes Zeichensatzhandling verweden.
Nunja, beginnne damit, dass Du Dein HTML in der gewünschten Zeichen_kodierung_ auslieferst.
Und dann löse Dich mal von dem Begriff "Zeichensatz".
Hotte
Hi,
Nunja, beginnne damit, dass Du Dein HTML in der gewünschten Zeichen_kodierung_ auslieferst.
Sorry ich habe das metatag in meinem Beispielcode (im Original
natürlich nicht) unterschlagen. so sieht's aus:
form.php:
---------
<?
$_SESSION['Thema'] = $_POST['Thema'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form method="post">
<select id="Thema" name="Thema" size="1" style="width:220px;">
<option <?=(($_SESSION['Thema']=="Mitgliedschaft und Beiträge")?'selected':'');?> value="Mitgliedschaft und Beiträge">Mitgliedschaft und Beiträge</option>
</select>
</body>
</html>
Und dann löse Dich mal von dem Begriff "Zeichensatz".
verstehe nicht. warum soll ich mich nun davon lösen ?
gruesse,
heinetz
@@heinetz:
»» Und dann löse Dich mal von dem Begriff "Zeichensatz".
verstehe nicht. warum soll ich mich nun davon lösen ?
Weil du ihn falsch verwendest.
Der Zeichensatz ist im HTML-Kontext immer UCS/Unicode. [QA-DOC-CHARSET]
Den Unterschied zwischen Zeichensatz und Zeichencodierung kannst du in [QA-WHAT-IS-ENCODING] und bei [Jendryschik] nachlesen.
Live long and prosper,
Gunnar
ok,
ich löse mih von dem Bergiff 'Zeichensatz' und spreche ab jetzt
von 'Zeichencodierung'. Damit ist mein Problem jedoch leider
nicht gelöst ;(
Nochmal meine Baustelle etwas weniger vereinfacht
sender.php
----------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form method="post" action="recient.php">
<select id="Thema" name="Thema" size="1" style="width:220px;">
<option value="Mitgliedschaft und Beiträge">Mitgliedschaft und Beiträge</option>
</select>
</body>
</html>
recient.php
-----------
<?
$_SESSION['Thema'] = $_POST['Thema'];
?>
output.php
----------
<?
echo ($_SESSION['Thema'] == "Mitgliedschaft und Beiträge");
?>
Ich wähle auf der Seite 'form.php' im Formular die Option
"Mitgliedschaft und Beiträge" und schicke das Form ab.
Die Seite 'recient.php', an die das Form abgesendet wurde,
soll diesen Wert in der Variablen $_SESSION['Thema'] speichern.
Beim Aufruf der Seite 'output.php' soll '1' ausgegeben werden,
wenn der Wert der Variablen $_SESSION['Thema'] "Mitgliedschaft
und Beiträge" ist.
Mein Problem ist, dass bei der Prüfung unter 3 unwahr herauskommt.
Ursächlich dafür ist, dass das 'ä' aus dem Formularwert nicht dem
'ä' bei der Prüfung entspricht, obwohl es das augenscheinlich tut.
an welchen Stellen sorge ich also dafür, dass das 'ä' zu jeder Zeit
und an jeder Stelle dieser Konstruktion in utf8 kodiert ist bzw. wo
muss ich es umcodieren ?
danke und
beste gruesse,
heinetz
hi,
output.php
[code lang=html]<?
echo ($_SESSION['Thema'] == "Mitgliedschaft und Beiträge");
^ das vergleicht Zahlen (aber ich kann mich auch irren, jedenfalls ist das in Perl so)
Dann prüf mal, in welcher Kodierung die php-Datei gespeichert wurde, in der geschrieben steht "Mitgliedschaft und Beiträge". Interessant wäre noch der Parser, der aus dem 'ä' was in UTF-8 als '%C3%A4' übertragen wurde tatsächlich ein 'ä' macht.
Hotte
hi,
Dann prüf mal, in welcher Kodierung die php-Datei gespeichert wurde
ja genau, das war wohl mein Problem. Die Dokumente sind alle in
Windows-Latin gespeichert gewesen.
gruesse,
heinetz
Hi,
<option value="Mitgliedschaft und Beiträge">Mitgliedschaft und Beiträge</option>
Ich wähle auf der Seite 'form.php' im Formular die Option
"Mitgliedschaft und Beiträge" und schicke das Form ab.Die Seite 'recient.php', an die das Form abgesendet wurde,
soll diesen Wert in der Variablen $_SESSION['Thema'] speichern.Beim Aufruf der Seite 'output.php' soll '1' ausgegeben werden,
wenn der Wert der Variablen $_SESSION['Thema'] "Mitgliedschaft
und Beiträge" ist.
Und aus welchem Grund nutzt du nicht gleich "1" als value der option?
Die Umschlüsselung des Wertes "1" in "Mitgliedschaft und Beiträge" ist eine, die ausschliesslich für den Benutzer interessant ist - weil der sich darunter etwas vorstellen kann, unter "1" aber weniger.
Aber für die Programmlogik ist "Mitgliedschaft und Beiträge" von kein bisschen mehr Bedeutung als eine "1", also kann die ruhig mit letzterer arbeiten.
MfG ChrisB
hi,
»» Und dann löse Dich mal von dem Begriff "Zeichensatz".
verstehe nicht. warum soll ich mich nun davon lösen ?
Der Begriff kommt aus dem Druckerhandwerk (Setzkasten). Wir hingegen schaffen mit Zeichenkodierungen. Freilich ist die Anzahl der Zeichen, die kodiert werden können, der Zeichenvorrat also, abhängig vom Code und dessen Länge. Beispielsweise können mit 7 Bit ebend nur 127 Zeichen kodiert werden (ohne NULL). Bei 8 Bit sind es schon 255 Zeichen usw.
Wenn Du Dein Form mit UTF-8 auslieferst und der Besucher ein 'ü' eintippst, macht der Browser beim Abschicken ein URI-encoding (früher hieß das escape), aus dem 'ü' wird ein '%C3%BC' und so geht das über den Draht.
Hättest Du das HTML-Formular mit der Kodierung ISO-8859-1 zum Browser geschickt, würde aus dem 'ü' ein '%FC'.
Mach Dir mal die Freude und rechne FC oder C3BC von hex nach dezimal. Im ersten Fall bekommst Du eine 252 und die passt noch in eine Kodierung, wo mit 8 Bit auskommt. Im zweiten Fall reichen 8 Bit nicht mehr, aber schau selbst...
Schließlich wird der Begriff 'charset' oftmals als 'Zeichensatz' übersetzt, obwohl 'set' von 'setting' abgeleitet ist. <http://de.selfhtml.org/inter/index.htm@title=Siehe auch hier unter Internationalisierung>.
Jetzt hättn wir das mal geklärt ;-)
Was Dein CGI mit dem eingegebenen Zeichensalat macht, ist eine andere, aber nicht weniger interessante Sache und falls es damit Probleme gibt, her damit.
Hotte