str_replace()

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von blck, 20.06.2008.

  1. blck

    blck Routinier

    Dabei seit:
    15.01.2007
    Beiträge:
    268
    Zustimmungen:
    0
    Nabend,
    ich hab mich mal mit str_replacer beschäftig.
    Hier mein Code:
    PHP:
    $bad=array("(",")","/","=","$","{","}","[","]","");
    $replace="Hallo, du hast leider einen nicht berechtigten Username eingegeben!";
    $username=str_replace($bad,$_POST['username'],$replace);
    So nun gibt es aber ein Problem, obwohl $_POST['username'] korrekt ausgegeben wird, zB per echo, gibt er mir immer $replace aus. Egal was ich eingebe. Ich lese immer die Phrase.
    Was kann ich tun, was hab ich nicht beachtet?

    Gruß Blck
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 uzumakinaruto, 20.06.2008
    uzumakinaruto

    uzumakinaruto Tripel-As

    Dabei seit:
    23.05.2008
    Beiträge:
    246
    Zustimmungen:
    0
    Ort:
    Gifhorn
    $bad ist ein array ;-)

    echo $bad[0]; # ausgabe (
    echo $bad[1]; # ausgabe /

    ich würde eher mit ereg() und regulären ausdrücken arbeiten ;)

    if (ereg(REGULÄRER AUSDRUCK))
    {
    # weiter
    }
     
  4. blck

    blck Routinier

    Dabei seit:
    15.01.2007
    Beiträge:
    268
    Zustimmungen:
    0
    Danke für die Antwort, wollt das Problem jetzt über eine foreach-Schleife lösen, so dass mein Code jetzt so aussieht:
    PHP:
     $bad = array("(",")","/","=","$","{","}","[","]","");
     
    $replace "Hallo, du hast leider einen nicht berechtigten Username eingegeben!";
     foreach (
    $bad as $unsave
     {
      
    $username=str_replace($unsave,$_POST['username'],$replace);
     }
    Bringt leider auch nichts :D

    Wäre nett wenn mir da nochmal jemand helfen könnte.
    Schönes Wochenende, Blck
     
  5. #4 Tblue, 20.06.2008
    Zuletzt bearbeitet: 20.06.2008
    Tblue

    Tblue Tripel-As

    Dabei seit:
    27.11.2007
    Beiträge:
    188
    Zustimmungen:
    0
    Machs doch einfach so:
    PHP:
    $username = isset($_POST['username']) ? trim($_POST['username']) : '';
    $regex '#(\(|\)|/|=|\$|\{|\}|\[|\])+#';
    if (empty(
    $username) || preg_match($regex$username))
    {
        die(
    'Ungültiger Benutzername.'); // Durch eine geeignetere Funktion ersetzen
    }
     
  6. blck

    blck Routinier

    Dabei seit:
    15.01.2007
    Beiträge:
    268
    Zustimmungen:
    0
    So danke, laufen tut es, verstehen tu ich es nicht aber gut. Wäre nur mal interessant wo bei mir der Wurm drin ist.
    Aber vielen Dank erstmal und schönes Wochenende,
    Blck
     
  7. #6 uzumakinaruto, 21.06.2008
    uzumakinaruto

    uzumakinaruto Tripel-As

    Dabei seit:
    23.05.2008
    Beiträge:
    246
    Zustimmungen:
    0
    Ort:
    Gifhorn
    warum deine version nicht funktioniert?? keine ahnung.
    ich weiß ja nicht ob $_POST['username'] wirklich ankommt.

    die foreach methode funktioniert auf jedenfall.

    mit str_replace zu arbeiten passt in diesem fall gar nicht ;)

    bsp:
    username = uzumak()naruto

    DEINE ausgabe wäre gewesen:
    uzumakHallo, du hast leider einen nicht berechtigten Username eingegebenHallo, du hast leider einen nicht berechtigten Username eingegebennaruto

    weißt du warum das so wäre????? ;)

    Tblue arbeitet mit regulären ausdrucken .. wenn auch nur ein zeichen aus der variable $regex in $username gefunden wird, wird das script abgebrochen und die fehlermeldung ausgegeben.
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. #7 Schneemann, 21.06.2008
    Schneemann

    Schneemann Routinier

    Dabei seit:
    27.06.2006
    Beiträge:
    289
    Zustimmungen:
    0
    Ort:
    /home/janosch
    Hi,

    Ich denke bei deinem Programm kommt immer $replace raus, da du die letzten beiden Parameter vertauschst hast. Er nimmt $replace als Input. $replace enthält keine der Strings aus $bad und ersetzt deshalb auch nichts mit $_POST['username']. Dann kommt natürlich am Ende wieder $replace raus.

    Anderstrum, würde er bei einem $_POST['username'] mit Strings aus $bad, diese mit $replace ersetzen. Aber nur die Zeichen aus $bad, deswegen gäbe es ein ziemliches Durcheinander.
     
  10. Tblue

    Tblue Tripel-As

    Dabei seit:
    27.11.2007
    Beiträge:
    188
    Zustimmungen:
    0
    Auch wenn der Thread schon etwas älter ist, möchte ich der Vollständigkeit halber noch strspn() erwähnen, das man wunderbar als Ersatz für preg_match() verwenden kann:
    PHP:
    if (empty($username) || strspn($username'()/=${}[]')) {
        die(
    'Ungültiger Benutzername.');
    }
    Laut PHP.net ist strspn() nämlich schneller als preg_match().
     
Thema:

str_replace()