str_replace()

blck

blck

Routinier
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
 
$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
}
 
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
 
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
}
 
Zuletzt bearbeitet:
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
 
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.
 
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.
 
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().
 

Ähnliche Themen

[php]readdir nach Datum sortieren?

Server's Power

lastfm blockiert Adept Manager und Firefox, help pls

Ablösen von Exchange2k3, OWA und W2k3 AD

Zurück
Oben