kostenloser Webspace werbefrei: lima-city


urlencode Fehlerhaft ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    digg

    digg hat kostenlosen Webspace.

    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!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    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));
  4. Autor dieses Themas

    digg

    digg hat kostenlosen Webspace.

    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 Eingabe
    Samsung 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
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    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);
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!