urlencode Fehlerhaft ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
all
ausgabe
code
codierung
dank
eingabe
filtern
formular
http
parameter
problem
richtig code
richtige codierung
richtige url
risiko
string
suchwort
tool
umstellung
-
Hallo
Wenn ich String für GET anfragen codieren will, komme ich nicht auf die "richtige" codierung ?
BSP 1:
$string1 = "Loydd´s"; $encstr1 = urlencode($string1); echo "<br />".$encstr1."\n";
mit urlencode() erhalte ich:Loydd%B4s
aber laut dem Tool: http://meyerweb.com/eric/tools/dencoder/
ist es anders richtig:Loydd%C2%B4s
und die GET-Abfrage funktioniert auch nur mit dieser Variante richtig
BSP 2:
$string2 = "Bücher"; $encstr2 = urlencode($string2); echo "<br />".$encstr2."\n";
mit urlencode() erhalte ich:B%FCcher
aber laut dem Tool: http://meyerweb.com/eric/tools/dencoder/
ist es anders richtig:B%C3%BCcher
und die GET-Abfrage funktioniert auch nur mit dieser Variante richtig
--> was läuft da bei urlencode() falsch
bzw.. wie komme ich auf die "richtige" url-codierung ???
Danke!
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Der Unterschied: einmal venwendest du ASCII und das andere Mal verwendest du UTF-8
Damit du dein gewünschtes Ergebnis bekommst:$string = "Bücher"; $encstr = urlencode(utf8_encode($string));
-
Danke, das ist es ... erwartet wird urlencode von UTF-8 String
habe es noch bischen erweitert, so dass es auch nach Umstellung der Seite auf UTF-8 funktioniert
(wenn dann Formular-Eingaben auch als UTF-8 ankommen)
function str2utf8 ($string) { if (mb_detect_encoding($string, 'UTF-8', true) === FALSE) { $string = utf8_encode($string); } return $string;
sonst könnte der $string ja evtl. doppelt utf8 encoded werden
PS:
wie soll (kann) ich die Formular-Eingabe sonst noch "filtern"
damit kein hack-Risiko besteht ....
Problem ist: es soll auch " als EIngabe möglich sein,
weil bei EingabeSamsung Galaxy S3
wird nach jedem Wort einzeln gesucht, also ODER
damit genau nur dieser String gesucht wird, müsste man eingeben:"Samsung Galaxy S3"
aber mit
im String hab ich dann wieder Probleme bei der Ausgabe"
habe es bisher so probiert:
if (isset($_REQUEST['q']) && !empty($_REQUEST['q'])) { $qstr = trim(chop($_REQUEST['q'])); $qstr = stripslashes($qstr); $qstr = html_entity_decode($qstr); // ---- Anwendung der function siehe oben ---- $qstr = str2utf8($qstr); // ---- sicherstellen dass String UTF-8 ist $url_qstr = urlencode($qstr); // ---- String fuer Request $show_q_str = htmlentities($qstr); // ---- String fuer Ausgabe } else { $qstr = ''; $url_qstr = ''; $show_q_str = ''; }
damit ich dann je Verwendung (Request / Ausgabe) verschiedenen Strings habe
für den REQUEST so
$parameter .= '&Query='.$url_qstr.'';
für Ausgabe im Formular so:
print "Suchwort: <input type=\"text\" name=\"q\" size=\"46\" maxlength=\"100\" value=\"".$show_q_str."\" />\n";
ohne htmlentities() bekomme ich es nicht hin, das er String mit " wieder augegeben werden kann
aber das hat zur Folge, dass ich jede Eingabe wieder html_entity_decode() machen muss
macht das so Sinn, oder gibt's "bessere" Lösung - Sonderzeichen
in User-Eingabe"
so dass es auch mit dem " wieder in HTML (formular input text value) ausgegeben wird ... ?
Beitrag zuletzt geändert: 6.8.2012 11:52:19 von digg -
Vergiss all die unnötigen Dinge und mach es einfach so:
$parameter = $_REQUEST['param']; echo(htmlentities($parameter));
Damit wird XSS verhindert... alles andere wäre schon wieder gefährlich.
Wenn du etwas in eine Datenbank eintragen willst oder sonst wo in einer Query verwendest musst du den String so escapen:$escaped = mysql_real_escape_string($parameter);
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage