kostenloser Webspace werbefrei: lima-city


PHP-Problem mit str_replace();

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    sincer

    Kostenloser Webspace von sincer

    sincer hat kostenlosen Webspace.

    ho ;)

    Ich bin gerade etwas am verzweifeln, weil ich nicht und nicht weiter komme...
    Ich vermute, dass es so ein Wald-Baum Fehler ist (Man sieht den Wald vor lauter Bäumen nicht...)

    Was ich will: An und für sich eine leichte Sache:
    Jemand gibt in ein Inputfeld einen Satz ein, und schickt ihn ab.
    HTML soll nicht zugelassen werden, alles soll klein geschrieben werden, und umlaute sollen alternativ ausgedrückt werden (zB ä -> ae) und statt einem Abstand zwischen den Worten soll ein + stehen.

    Soweit zur Theorie... Mein PHP Code:
    (Wobei das abgesendete ($_POST['wort']) entweder ein Wort, oder ein Satz sein kann)
    $wort = htmlspecialchars($_POST['wort']);
    
          $new_wort = strtolower($wort);
          $new_wort = str_replace("Ä", "ä", $new_wort);
          $new_wort = str_replace("Ö", "ö", $new_wort);
          $new_wort = str_replace("Ü", "ü", $new_wort);
          $new_wort = str_replace(" ", "+", $new_wort);
          $new_wort = str_replace("ä", "ae", $new_wort);
          $new_wort = str_replace("ü", "ue", $new_wort);
          $new_wort = str_replace("ö", "oe", $new_wort);
    
          echo $new_wort;


    Was passiert:
    HTML wird nicht angewendet, das passt soweit,
    Alles wird klein geschrieben (außer Umlaute),
    Alle Abstände werden zu +, passt auch.

    Was leider nicht passiert ist die Umwandlung der Umlaute...
    Ich habe bereits herausgefunden, dass der Befehl "strtolower()" nur normale Buchstaben in Kleinbuchstaben ändert, Umlaute werden dabei ignoriert...
    Nun kann man das ja umgehen, indem ich sage, dass aus Groß Ä ein klein ä gemacht werden soll, damit später aus klein ä ein klein ae wird. Das funktioniert aber leider nicht, und ich habe keine Ahnung, warum.

    Ich hoffe, dass ihr mir dabei ein wenig weiter Helfen könnt.

    lg
    Sincer

    PS: Der einzige unterschied zwischen meinem Code und dem Code, den ich hier gepostet habe ist der folgende:
    Hier wird der Satz direkt in einem echo ausgegeben.
    Bei mir wird das ganze in eine Datenbank geschrieben, und dann ausgelesen. Ich denke aber nicht, dass das der Grund für das Problem ist. (Falls das doch ein Problem sein sollte, wollte ich es nicht verheimlichen ^^)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. t*****b

    Ich habe leider nur eine Vermutung und zwar folgende: Die Daten kommen über das Formular in einer anderen Codierung rein, als dein Script hat. Das kannst du ganz leicht überprüfen, indem du in den Seiteneigenschaften (zB mit dem FF) die Codierung nachschaust und in deinem Texteditor ebenso. Wenn beide übereinstimmen, müsste das Script funktionieren.

    /Edit:
    Ich hatte gestern ein kleines ähnliches Problem (da ging es um die Suche in einer Db in kroatischer Sprache, soll funktionieren mit kroatischen und nicht kroatischen Buchstaben, zB c = c^). Ich habe mir eine Funktion geschrieben:

    function encode($s) {
     $s = str_replace(...,...,$s);
     return $s;
    }
    
    echo encode($_POST["para"]);


    Das hat so leider nicht funktioniert, komischerweise. Erst per:
    $foo = $_POST["para"];
    echo encode($foo);


    hat es auch mit Sonderzeichen funktioniert. Wird wohl ein Bug sein...

    Beitrag zuletzt geändert: 25.7.2009 12:06:31 von trueweb
  4. Autor dieses Themas

    sincer

    Kostenloser Webspace von sincer

    sincer hat kostenlosen Webspace.

    Kurz gesagt... Du meinst, ich soll folgendes machen:

    $wort = $_POST['wort'];
    $new_wort = htmlspecialchars($wort);
    $new_wort = strtolower($new_wort);
    // usw...


    Ich versuche es gleich mal und melde mich dann wieder :P

    //EDIT: Das funktioniert leider nicht :(
    (Oder hast du etwas anderes gemeint?)

    lg
    Sincer

    Beitrag zuletzt geändert: 25.7.2009 12:36:03 von sincer
  5. Ein für Umlaute angepaßtes Snippet von php.net:

    <?php
    function niceURL($string)
    {
       $alt = array( 'ä','ö','ü','Ä','Ö','Ü','ß',' ');
       $neu = array( 'ae','oe','ue','ae','oe','ue','ss','+' );
       return strtolower( str_replace( $alt,$neu,$string ) );
    }
    
    $wort = $_POST['wort'];
    $new_wort = htmlspecialchars($wort);
    echo niceURL($new_wort);
    
    ?>

  6. Was ich mir vorstellen könnte ist, dass es mit dem htmlspecialchars zusammen hängt - obwohl ich da andauernd das gegenteil lese. Eventuell besteht halt das Problem in &Auml usw...

    also ggf. mal probieren
    $new_wort = str_replace("&Auml;", "ä", $new_wort);
          $new_wort = str_replace("&Ouml;", "ö", $new_wort);
          $new_wort = str_replace("&Uuml;", "ü", $new_wort);
          $new_wort = str_replace(" ", "+", $new_wort);
          $new_wort = str_replace("ä", "ae", $new_wort);
          $new_wort = str_replace("ü", "ue", $new_wort);
          $new_wort = str_replace("ö", "oe", $new_wort);

    Oder so ähnlich. Wenn das nicht das Problem ist, eventuell mal probieren, das Problem via htmlentities zu provozieren ;)

    Wäre halt so eine Idee...
  7. htmlspecialchars() kann kein "Ä" zu einem "&Auml;" machen, dies gillt nur für Sonderzeichen wie "&" -> "&amp;"

    htmlentities() kann dies aber... sprich Dein Code müsste so aussehen:
    $wort = htmlentities($_POST['wort']);


    Mehr ist nicht nötig, also kein Umschreiben von "&auml" zu "ae" und so weiter. Auch Injektions sind damit nicht möglich, da alle Sonderzeichen in entsprechenden HTML-Code gewandelt werden.
  8. also dein code funktioniert so
    $wort = htmlspecialchars($_POST['wort']);
    
          $new_wort = strtolower($wort);
          $new_wort = str_replace("Ä", "ä", $new_wort);
          $new_wort = str_replace("Ö", "ö", $new_wort);
          $new_wort = str_replace("Ü", "ü", $new_wort);
          $new_wort = str_replace(" ", "+", $new_wort);
          $new_wort = str_replace("ä", "ae", $new_wort);
          $new_wort = str_replace("ü", "ue", $new_wort);
          $new_wort = str_replace("ö", "oe", $new_wort);
    
          echo $new_wort;
    auch wenns ein bischen merkwürdig aussieht ^^

    dis hier von fat sieht doch viel schöner aus ^^
    function niceURL($string)
    {
       $alt = array( 'ä','ö','ü','Ä','Ö','Ü','ß',' ');
       $neu = array( 'ae','oe','ue','ae','oe','ue','ss','+' );
       return strtolower( str_replace( $alt,$neu,$string ) );
    }

    scheint wirklich an deinem datenbank zugriff zu liegen
    kommt mir aber auch spanisch vor
    hm eventuell solltest bei deiner datenbank mal utf 8 general einstellen
    sollte man angeblich immer benutzen

    @true
    wegen dem $foo
    öhm php wird auf server ausgeführt und nutzt dessen zeichensatz
    post wird vom user ausgeführt und verschickt seinen zeichen satz
    bei der zu weisung $foo=post
    wandelt der server den zeichen satz um?
    klingt bekloppt wenn ehrlich bin
    aber probier mal das
    function encode($stupid) 
    {
     $s = $stupid;
     $s = str_replace(...,...,$s);
     return $s;
    }
    
    echo encode($_POST["para"]);
    glaub das funzt dann auch
    aber irwie versteh ich das mit den 3 punkten nicht muß ich mir mal ankucken

    @sincer vieleicht solltest das auch mal mit $stupid probieren ^^

    Beitrag zuletzt geändert: 25.7.2009 16:12:07 von aero23
  9. Autor dieses Themas

    sincer

    Kostenloser Webspace von sincer

    sincer hat kostenlosen Webspace.

    ho ;)

    aero23 schrieb:
    @sincer vieleicht solltest das auch mal mit $stupid probieren ^^


    Ich glaube, das mache ich :D
    Na, spaß. Wie immer vielen Dank für eure rasche Hilfe. :)
    (Hab atm nur wenig Zeit, aber ich probiere das mal aus, und schreibe dann (falls ich nicht vergessen XD) was funktioniert hat.)

    thx
    Sincer
  10. g****e

    ich könnte dir statt str_replace das preg_replace empfehlen. ist sehr leicht und bringt im enddefekt das selbe
    hier der link zur erklärung:
    http://www.php.net/manual/de/function.preg-replace.php
  11. 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!