Eingabefelder und Euro-Zeichen
Roar
- php
Ich hab ein Problem mit dem Einlesen von Daten aus einem HTML-Eingabefeld in eine Datei.
Ich habe also eine Form mit einem Input Feld:
new.php:
...
<?php
if (isset($_POST['send'])) {
if (!eregi('preis',$gen_price)) {
$gen_price_invalid_text = 'Ein Preis mit Text muss angegeben werden';
$gen_price_invalid = true;
}
...
if (!$invalid_input) {
...
fwrite($handle,utf8_encode(htmlentities($gen_price))."\r\n");
...
}
?>
<?php
echo '<?xml version="1.0" encoding="UTF-8" ?>'."\n";
?>
...
<form name="update_hp" method="post" enctype="multipart/form-data" action="new.php">
<input id="field" name="gen_price" />
<input type="submit" name="send" value="Absenden" />
</form>
...
Beim Drücken auf den Absenden-Button wird die gleiche Datei wieder aufegrufen und es werden die Variablen überprüft. Bei Erfolg werden die Daten in eine Datei geschrieben und es wird an eine andere Datei weitergeleitet.
Das Problem ist nun, falls im Eingabfeld das Eurozeichen vorkommt, wird dieses nicht in € umgewandelt, sondern in der Datei steht anschließend ein Kästchen. Bei anderen Sonderzeichen wie ö ä ü ß funktioniert alles problemlos.
Die Dateien selbst (php, html) sind als UTF-8 abgespeichert.
hi,
Das Problem ist nun, falls im Eingabfeld das Eurozeichen vorkommt, wird dieses nicht in € umgewandelt,
Warum sollte es?
sondern in der Datei steht anschließend ein Kästchen. Bei anderen Sonderzeichen wie ö ä ü ß funktioniert alles problemlos.
Die Dateien selbst (php, html) sind als UTF-8 abgespeichert.
Und die Daten selber möchtest du auch in UTF-8 erfassen und wieder ausgeben?
Als erstes solltest du mal deinem Formular auch noch ein entsprechendes accept-charset="utf-8" verpassen - damit der browser auch definitiv gesagt bekommt, dass du die Formulardaten als UTF-8 bekommen möchtest, und nicht in sonsteiner Kodierung, die dem Browser u.U. besser gefällt.
gruß,
wahsaga
hi,
Das Problem ist nun, falls im Eingabfeld das Eurozeichen vorkommt, wird dieses nicht in € umgewandelt,
Warum sollte es?
Wenn ich die gespeicherte Datei einlese wird, bekomme ich das Kästchen. Wenn ich dies im HTML-Code dann ausgebe, bekomme ich unter Windows das Eurozeichen (Obwohl im Quelltext das Kästchen ist), aber unter Linux bekomme ich nur kommisches Zeugs. Umgekehrt genau das gleiche Problem (also wenn ich unter Linux die Datei abspeichere funktioniert auch das auslesen wieder aber nicht mehr unter Windows)
sondern in der Datei steht anschließend ein Kästchen. Bei anderen Sonderzeichen wie ö ä ü ß funktioniert alles problemlos.
Die Dateien selbst (php, html) sind als UTF-8 abgespeichert.Und die Daten selber möchtest du auch in UTF-8 erfassen und wieder ausgeben?
Is mir eigentlich egal. Ich will nur das mit dem Eurozeichen hinkriegen, also dass ich ein € bekomme.
Als erstes solltest du mal deinem Formular auch noch ein entsprechendes accept-charset="utf-8" verpassen - damit der browser auch definitiv gesagt bekommt, dass du die Formulardaten als UTF-8 bekommen möchtest, und nicht in sonsteiner Kodierung, die dem Browser u.U. besser gefällt.
Hab ich schon probiert. Funktioniert aber nicht.
gruß,
wahsaga
Danke und Gruß, Roar
hi,
Wenn ich die gespeicherte Datei einlese wird, bekomme ich das Kästchen.
Wie und wo?
Wenn ich dies im HTML-Code dann ausgebe, bekomme ich unter Windows das Eurozeichen (Obwohl im Quelltext das Kästchen ist), aber unter Linux bekomme ich nur kommisches Zeugs.
Wird die Seite mit passenden Angaben zur Zeichenkodierung ausgeliefert?
gruß,
wahsaga
hi,
Wenn ich die gespeicherte Datei einlese wird, bekomme ich das Kästchen.
Wie und wo?
Einlesen mach ich in einer anderen Datei:
overview.php:
<?php
echo '<?xml version="1.0" encoding="UTF-8" ?>'."\n";
?>
...
<body>
...
chdir('../test');
if (file_exists('test.eid')) {
if ($handle = @fopen('test.eid', 'r')) {
while (!feof($exposee_handle)) {
$line_text = trim(fgets($handle));
$line_count++;
switch ($line_count) {
...
case 4:
$gen_price_file = utf8_decode($line_text);
break;
...
default:
}
}
}
}
fclose($handle);
}
}
...
Das Kästchen erscheint aber schon in der Datei test.eid. Also kanns am Einlesen nicht liegen.
Wenn ich dies im HTML-Code dann ausgebe, bekomme ich unter Windows das Eurozeichen (Obwohl im Quelltext das Kästchen ist), aber unter Linux bekomme ich nur kommisches Zeugs.
Wird die Seite mit passenden Angaben zur Zeichenkodierung ausgeliefert?
Beide Seiten (new.php und overview.php) haben folgendes am Anfang stehen:
<?php
echo '<?xml version="1.0" encoding="UTF-8" ?>'."\n";
?>
gruß,
wahsaga
Moin!
Du möchtest zuzsätzlich:
Erstens:
Auf beiden Seiten den meta-tag Content-type setzen und den Zeichensatz übergeben:
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
Natürlich kannst Du das alternativ auch mit:
<?php
header("Content-type: text/html; charset=UTF-8");
echo '<?xml version="1.0" encoding="UTF-8" ?>'."\n"; #Kurztags nicht ausgeschaltet?
?>
...
<h1>Sicherheitshalber:</h1>
<form ... accept-charset="utf-8">
...
oder mit einer entsprechenden Konfiguration des Servers. Selbstredend kannst Du auch alle drei Methoden verwenden.
Zweitens:
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Also erst mal Danke euch beiden für die Hilfe!
Moin!
Du möchtest zuzsätzlich:
Erstens:
Auf beiden Seiten den meta-tag Content-type setzen und den Zeichensatz übergeben:
<meta http-equiv="content-type" content="text/html; charset=UTF-8">Natürlich kannst Du das alternativ auch mit:
<?php
header("Content-type: text/html; charset=UTF-8");
echo '<?xml version="1.0" encoding="UTF-8" ?>'."\n"; #Kurztags nicht ausgeschaltet?
?>
...
<h1>Sicherheitshalber:</h1>
<form ... accept-charset="utf-8">
...oder mit einer entsprechenden Konfiguration des Servers. Selbstredend kannst Du auch alle drei Methoden verwenden.
Habe bei beiden Seiten das meta-tag hinzugefügt: geht nicht. Server kann ich nicht konfigurieren...
Zweitens:
- Deinem Quelltext-Betrachter mitteilen, er möge Dir den Text als UTF-8 darstellen.
Wie meinst du das? Mein Problem ist, dass das Eurozeichen im Inputfeld richtig angezeigt wird. Dann wenn ich aber auf Abschicken gehe und der Inhalt dieses Input-Feldes in eine Datei mit htmlentities gesichert werden soll, steht dann dort weder € noch € sondern ein in htmlentiies umgesetztes € (unter Linux): ⬠. unter Windows steht in der Datei nur ein Kästchen, welches beim späteren Einlesen aus der Datei in eine HTML-Seite genauso in der HTML_Datei drinsteht. Der Browser interpretiert aber dann das Kästchen wieder als €.
Total verwirrend :D
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin!
Wie meinst du das? Mein Problem ist, dass das Eurozeichen im Inputfeld richtig angezeigt wird. Dann wenn ich aber auf Abschicken gehe und der Inhalt dieses Input-Feldes in eine Datei mit htmlentities gesichert werden soll, steht dann dort weder € noch € sondern ein in htmlentiies umgesetztes € (unter Linux): ⬠. unter Windows steht in der Datei nur ein Kästchen, welches beim späteren Einlesen aus der Datei in eine HTML-Seite genauso in der HTML_Datei drinsteht. Der Browser interpretiert aber dann das Kästchen wieder als €.
Total verwirrend :D
Nein, ist es nicht!
htmlentities() will aber auch den Zeichensatz wissen.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin!
Wie meinst du das? Mein Problem ist, dass das Eurozeichen im Inputfeld richtig angezeigt wird. Dann wenn ich aber auf Abschicken gehe und der Inhalt dieses Input-Feldes in eine Datei mit htmlentities gesichert werden soll, steht dann dort weder € noch € sondern ein in htmlentiies umgesetztes € (unter Linux): ⬠. unter Windows steht in der Datei nur ein Kästchen, welches beim späteren Einlesen aus der Datei in eine HTML-Seite genauso in der HTML_Datei drinsteht. Der Browser interpretiert aber dann das Kästchen wieder als €.
Total verwirrend :DNein, ist es nicht!
htmlentities() will aber auch den Zeichensatz wissen.
Habs jetzt geändert in fwrite($handle,htmlentities($price,ENT_COMPAT,"UTF-8")."\r\n");
Und jetzt funktioniert es endlich (unter Linux). Windows weiß ich noch nicht :D
Aber wird schon hinhaun :D
Vielen vielen Dank!
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®