kostenloser Webspace werbefrei: lima-city


Formular Eingabe und Umlaute

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    girowechsel

    girowechsel hat kostenlosen Webspace.

    Hallo

    ich habe ein Such-Formular mit einfachem Text-Feld
    <form name="suchform" method="post" action="" accept-charset="UTF-8"> 
     Suche: <input type="text" name="suche" size="40" maxlength="100" /> 
     &nbsp;&nbsp; <input type="submit" name="go" value="Suchen" /> 
    </form>


    und gegen ungewünschte EIngaben in das Textfeld mache ich u.a. htmlentities():

    $string = $_POST['suche']; 
    
    $string = htmlentities($string);


    wenn ich dann aber Umlaute .... ä ö ü Ä Ö Ü ß .... etc. im Text habe
    dann ist der String anstatt BSP. so ... Löffel .... dannn BSP.so ... L&ouml;ffel

    und deswegen gibt es dann keine Treffer für die Suche, unterschiedlicher "String"

    Wenn z.B. ein Herr "Müller" in der Datei gesucht werden soll
    das geht nicht mit "M&uuml;ller" als Such-String bei Abfrage.

    mir wurde htmlentities() empfohlen, gegen 'böse' Eingaben ins Text-Feld.
    .... doch wie mache ich das dann sonst Eingabe halbwegs sicher mit Umlauten ???




    Beitrag zuletzt geändert: 3.10.2015 11:45:43 von girowechsel
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. Also htmlentitites() würde ich primär für die Ausgabe von Strings benutzen, die "mehr oder weniger gefährlichen" Code enthalten können.

    Um eine Datenbank zu durchsuchen würde ich
    mysql_real_escape_string()
    empfehlen (http://php.net/manual/de/function.mysql-real-escape-string.php), diese Funktion ist aber seit PHP 5.5.0 veraltet und sollte in MySQLi oder PDO_mysql nicht verwendet werden.

    MySQLi
    mysqli_real_escape_string()
    (http://php.net/manual/de/mysqli.real-escape-string.php)

    PDO_MySQL
    quote()
    (http://php.net/manual/de/pdo.quote.php) -> fügt auch einfache Anführungszeichen an.
  4. forceofkingdoms

    forceofkingdoms hat kostenlosen Webspace.

    Könnte es sein, dass du ausversehen zweimal htmlentities für den selben String auswählst?
    Ich hab mal etwas rumgespielt:

    Meine Eingabe:
    öäü

    Mein Script;
    $string = $_POST['suche']; 
    echo $string;
    echo htmlentities($string)."<br>";
    echo htmlentities(htmlentities($string)."<br>";


    Meine Ausgabe:
    öäü
    öäü
    &ouml;&auml;&uuml;


    Ich bekomme diese &ouml; etc. nur, wenn ich zweimal htmlentities verwende.
    Ansonsten bekomme ich den Normalwert ö

    Hoffe ich konnte einwenig helfen

    mfG
    FoK
  5. htmlentities() ist ja nicht so wichtig. Ich habe einfach den String direkt mit $_GET["suche"] abgefragt und in der Datenbank danach gesucht.

    Anmerkung: Du musst "suche" natürlich durch den Namen deines Textfeldes ersetzten
  6. Eine andere Möglichkeit wäre es, die ganze Webseite und auch die Datenbank in UTF8 zu kodieren. Diese kann dann deutsche Umlaute ganz normal behandeln und für den Suchstring Ö kommt dann auch Ö.
  7. Oder du nutzt die prepared Statements.

    In mysqli würde da schon mysqli_real_escape_string reichen, um deine Datenbank zu schützen. In PDO gibt es die prepared Statements, die ähnlich funktionieren.


    Dennoch sollte Script, Header, Datenbankverbindung und Datenbank im gleichen Charset/ Koallation laufen.
  8. 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!