PHP Umlaut Filter. geht bei Usereingabe nicht.
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
browser
code
cool danke
datum
eingabe
filter
formular
frage
http
logischen schlauch
set
sonderzeichen
sorgen
string
tun
type
umlaut
url
zeichensatz
-
Hallo LC,
Ich habe mir einen Umlaut Filter gebastelt:
$umlaute = Array("/ä/","/ö/","/ü/","/Ä/","/Ö/","/Ü/","/ß/"); $replace = Array("ae","oe","ue","Ae","Oe","Ue","ss"); $user2 = str_ireplace($umlaute, $replace, $user);
aber leider funktioniert das nicht?!
Der Filter überprüft die Eingabe eines Users.
Wenn ich es so teste geht es:
$user ="ä"; $umlaute = Array("/ä/","/ö/","/ü/","/Ä/","/Ö/","/Ü/","/ß/"); $replace = Array("ae","oe","ue","Ae","Oe","Ue","ss"); $user2 = str_ireplace($umlaute, $replace, $user);
aber wenn ich das aus einem Formular bekomme nicht.
Woran kann das liegen bzw. wie kann ich das lösen?
LG
Christian
PS: geht nicht soll heißen: er ersetzt die umlaute einfach nicht. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi Christian1603,
es ist nur ein erster Verdacht meinerseits - also nicht als Expertenmenung Missverstehen ;)
Bist du dir ganz sicher, dass aus deinem Formular auch ein "ä" ankommt? Ich frage einfach weil ja bei der übertragung der Daten die Sonderzeichen und Umlaute normalerweise Codiert werden.
Also ein Zeichen je nach Zeichensatz entsprechend umgesetzt wird. Somit könnten die Daten aus dem Formular ja trotz Eingabe des ä ja schon in ein "ä" verwandelt worden sein.
<?php
$str = "Ein 'Anführungszeichen' ist <b>fett</b>";
// Gibt aus: Ein 'Anführungszeichen' ist <b>fett</b>
echo htmlentities($str);
// Gibt aus: Ein 'Anführungszeichen' ist <b>fett</b>
echo htmlentities($str, ENT_QUOTES);
?>
-
mh...
das ist mein Formular
<form method=\"POST\"> Gib deinen Namen ein (A-Z, 0-9): <input type=\"text\" name=\"user\"/> <input type=\"submit\" name=\"button\" value=\senden\" /> </form>
Wenn ich die eingabe ausgebe kommt ä und im quelltext steht auch ä -
ja ... also wie gesagt ich bin da nicht 100% sicher ... aber würde dich jetzt einfach auch mal auf eine andere Seite verweisen.
http://www.w3schools.com/tags/ref_urlencode.asp
"URLs can only be sent over the Internet using the ASCII character-set."
Damit ergibt sich einfach, dass dein String den du dann auf Serverseite auswertest einfach schon kein "ä" mehr beinhaltet. Es werden halt alle Sonderzeichen für das Versenden im Browser ersetzt, und wenn du irgendwann einen String später zurückbekommst entsprechend auch wieder "zurückübersetzt". -
Ähm, htmlentities haben hier mit gar nix zu tun, und das URL-Encoding wird auch von PHP automatisch rückgängig gemacht beim "entpacken" des Query-Strings.
Ich vermute hier eher, dass der Zeichensatz von deinem PHP-Script nicht mit dem übereinstimmt, in dem der Browser die Daten sendet. Vermutlich ist dein Script in UTF8 kodiert, während der Browser mit ISO-8859-1 rumhantiert. Hier hilft entweder manuell umkodieren (utf8_decode, iconv o.ä.), oder einfach dafür sorgen, dass alles einheitlich mit einem Zeichensatz läuft (am besten UTF8). -
theseven schrieb: Ähm, htmlentities haben hier mit gar nix zu tun, und das URL-Encoding wird auch von PHP automatisch rückgängig gemacht beim "entpacken" des Query-Strings.
Ich vermute hier eher, dass der Zeichensatz von deinem PHP-Script nicht mit dem übereinstimmt, in dem der Browser die Daten sendet. Vermutlich ist dein Script in UTF8 kodiert, während der Browser mit ISO-8859-1 rumhantiert. Hier hilft entweder manuell umkodieren (utf8_decode, iconv o.ä.), oder einfach dafür sorgen, dass alles einheitlich mit einem Zeichensatz läuft (am besten UTF8).
Hey,
füge das mal ein
header('Content-Type:text/html; charset=UTF-8');
LG
Beitrag zuletzt geändert: 14.4.2010 20:05:26 von schuelerhc -
Danke Schonmal für die vielen antworten.
Es geht aber immer noch nicht.
kann man in php bei einer variable diereckt UTF8 "einbauen".
LG -
@christian1603
... Es geht aber immer noch nicht.
mal auch schon probiert?:
ich verstehe eben nicht, was die slashes dabei bedeuten sollen. oder stehe ich gerade mit beiden füßen auf dem logischen schlauch!?$umlaute = array("ä","ö","ü","Ä","Ö","Ü","ß");
-
czibere schrieb: @christian1603
... Es geht aber immer noch nicht.
mal auch schon probiert?:
ich verstehe eben nicht, was die slashes dabei bedeuten sollen. oder stehe ich gerade mit beiden füßen auf dem logischen schlauch!?$umlaute = array("ä","ö","ü","Ä","Ö","Ü","ß");
Cool danke jetzt geht es! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage