hi,
klingt irgendwie ein bisschen verworren und unausgereift ...
PHP unterstützt Unicode leider nur mit den Funktionen utf8_encode() und utf8_decode()
Was soll das bedeuten?
PHP hat zwar bisher keine native Unicode-Unterstützung - aber Erweiterungen wie die mbstring-Funktionen oder iconv existieren trotzdem.
Zur Sicherheit, besonders für das Laden durch einen xmlhttprequest (Safari hat utf-8 nicht als default) von php generierten Antworten vom Server vor jeglichem Output (sofern es sich nicht um xml sondern um html handelt):
<?php header("Content-type:text/html; charset=utf-8"); ?>
ausgeben.
Das sollte doch wohl sowieso selbstverständlich sein.
Formulare können wie folgt definiert werden:
<form name="form1" id="form1" method="post" action="post-end.php" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
oder
<form name="form1" id="form1" method="post" action="post-end.php" enctype="multipart/form-data" accept-charset="utf-8">
Die 2. Möglichkeit wird benötigt, falls files mit dem Formular mitgeschickt werden.
Die erste dürfte hingegen kontraproduktiv sein, da nicht alle Browser enctype="application/x-www-form-urlencoded" korrekt umsetzen. Da also lieber auf die enctype-Angabe verzichten.
Wird nun ein solches Formular via HTTP verschickt, so erreicht es den Webserver und damit PHP in der x-www-form-urlencoded Form. Um nun die mitgeschickten Werte in der mySql-DB zu speicher müssen diese decodiert werden:
Wieso das denn?
<?php
$str = utf8_decode($_POST['formularfeld1']);
$sql = "UPDATE mytable SET myfield='{$str}' WHERE ...";
?>Die 'Collation' der felder in der mytable auf der mySQL-DB sollte auf 'utf8_unicode_ci' gesetzt sein. Siehe phpMyAdmin.
Wenn deine MySQL-DB schon UTF-8 verarbeiten und entgegennehmen mag - wieso bitte willst du dann die UTF-8-Daten vorher "dekodieren"?
Beim Auslesen der Werte aus der DB und ihrer Darstellung über PHP auf einem Webbrowser, sind erst die oben genannten header-infos zu schicken und dann der Wert der aus der DB zu enkodieren:
[...]
echo utf8_encode($res['myfield']);//$res hat die ergebnisse der Datenbankabfrage gespeichert.
Auch wieder unnötig kompliziert.
Dekodieren zum Eintragen in die DB, und wieder kodieren bei der Ausgabe? Das ist doch Humbug.
und schon hat man eine funktionierende utf-8 Umgebung.
Hättest du auch einfacher haben können.
Sollen die Formular-Werte über xmlhttprequest an den Server verschickt werden, können sie der xmlhttprequest.send() als String-parameter übergeben werden:
[...]
return encodeURI(str);//encodeURI damit auf der php-seite utf8_decode angewandt werden kann:
Den Kommentar halte ich auch wieder für unsinnig.
Dass Daten vor der Übertragung URL-gerecht kodiert werden, ist das normalste von der Welt - und dass sie dir in PHP bereits "dekodiert" zur Verfügung stehen, sofern du nicht explizit für Gegenteiliges sorgst, auch.
Wofür du also ständig Daten aus UTF-8 heraus "dekodieren" willst, wenn du doch eigentlich deine Datenhaltung in UTF-8 haben willst, erschließt sich mir nicht.
gruß,
wahsaga
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }