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:12$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)
12345function
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:
1234567891011121314151617if
(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:Damit wird XSS verhindert... alles andere wäre schon wieder gefährlich.12
$parameter
=
$_REQUEST
[
'param'
];
echo
(htmlentities(
$parameter
));
Wenn du etwas in eine Datenbank eintragen willst oder sonst wo in einer Query verwendest musst du den String so escapen:1$escaped
= mysql_real_escape_string(
$parameter
);
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage