strpos Badword Liste-kein F*CK ?
Nicole
- php
Hallo erst mal;-)
Seltsames ist mir heute wiederfahren.
Habe eine Badwordliste mit strpos()gebastelt und
die funktioniert auch tadelos, aber...
Auf 2 Worte reagiert strpos nicht:
fick
fuck
Das ist echt kein Witz.
Habe ich eine verseuchte PHP version,
oder habt Ihr das gleiche Ergebniss ?
$checkstr="";
$badwords=array("dreck","mist",fuck","fick","porn");
foreach($badwords as $bad)
{if(substr_count($checkstr,$bad)){$error.="<br>$bad";}}
Gruss Nikki
War das falsche script vorhin.
Hier hatte ich schon strpos durch substr_count() ersetzt.
Aber das gehört ja nicht zu meiner Frage.
{if(substr_count($checkstr,$bad)){$error.="<br>$bad";}}
Richtig ist natürlich:
$checkstr="";
$badwords=array("dreck","mist",fuck","fick","porn");
foreach($badwords as $bad)
{if(strpos($checkstr,$bad)){$error.="<br>$bad";}}
Gruss Nikki
Hi Nikki,
solche Skripte nützen zwar gar nix und ich weiss auch nicht,
warum man sowas überhaupt einbaut, aber na gut....
hier fehlen ein Entenfüsschen ;o)
$badwords=array("dreck","mist",fuck","fick","porn");
^
Gruss
annA
solche Skripte nützen zwar gar nix und ich weiss auch nicht,
Hallo Annna
das siehst du falsch, denn es sind nicht nur Worte die man damit
ausblenden kann, sondern man kann damit auch eine vefeinerte
strip_tags version erzielen. Thema Sicherheit.
hier fehlen ein Entenfüsschen ;o)
$badwords=array("dreck","mist",fuck","fick","porn");
Ja stimmt, aber nur hier im Forum(war halt spät ;-).
Im Original ändert das leider nichts:
$badwords=array("dreck","mist",fuck","fick","porn");
Gruss Nikki
Nikki,
da fehlten doch schon wieder die "...
das Skript funktioniert bei mir, kopier das doch mal genau so
<?php
$checkstr= "Hallo dreck was für ein fuckmist";
$badwords=array("dreck","mist","fuck","fick","porn");
foreach($badwords as $bad)
{
if(strpos($checkstr,$bad)){
$error.="$bad<br>";}
}
echo "$error";
?>
Gruss
annA
PS: Um Tags in Postings zuvermeiden, ist eine solche Funktion
natürlich hilfreich, bloss eben nicht um zu verhindern, dass jemand
so ein xSxCxHxExIxSxS in ein Forum schreibt.
das Skript funktioniert bei mir, kopier das doch mal genau so
$checkstr= "Hallo dreck was für ein fuckmist";
Hallo Anna,
tja seltsam das.
Jetzt habe ich den Fehler gefunden:
Das böse Wort darf nicht am Anfang stehen und somit
ist strpos() eine böse Falle weil viele diese Funktion so nutzen.
Probier das mal ;-)
<?php
//Badword
$checkstr= "fuck this bad strposfunc"; // fuck zuerst
$badwords=array("<?","<html>","<body","dreck","mist","fuck","fick","porn");
foreach($badwords as $bad)
{
if(strpos($checkstr,$bad)){
$error.="$bad<br>";}
}
echo "$error";
?>
Vielen Dank
Nikki
ps. Deshalb nutze ich substr_count($checkstr,$bad)
...oder kennst du eine andere Alternative?
Ich will keine Funk. wie strstr oder so nehmen
weil dann der ganze str als Rückgabewert kommt,
somit langsamer.
Moin Moin !
Jetzt habe ich den Fehler gefunden:
Das böse Wort darf nicht am Anfang stehen und somit
ist strpos() eine böse Falle weil viele diese Funktion so nutzen.
if(strpos($checkstr,$bad)){
Waaaaah! Mädels! Das kann doch nicht wahr sein!
Was liefert strpos zurück? Steht alles unter http://www.php.net/manual/de/function.strpos.php! Und da steht auch, wie man das Ergebnis RICHTIG abfragt.
<ZITAT>
Anmerkung: Die Meldungen "Zeichen bei Position 0 gefunden [...]" und "Zeichen nicht gefunden [...]" werden oft falsch ausgelegt. Hier die Unterscheidung:
// in PHP 4.0b3 und danach:
$pos = strpos ($mystring, "b");
if ($pos === false) { // Achtung: 3 Gleichheits-Zeichen
// nicht gefunden...
}
// in Versionen vor 4.0b3:
$pos = strpos ($mystring, "b");
if (is_string ($pos) && !$pos) {
// nicht gefunden...
}
</ZITAT>
Wenn der gesuchte String am Anfang, also ab dem Zeichen mit dem Index 0 steht, liefert strpos 0 zurück. Wenn der gesuchte String gar nicht da ist, liefert strpos FALSE. if(0) und if(FALSE) sind für PHP nun einmal identisch.
Alexander
PS: Ich habe keine Ahnung von PHP. Aber ich kann http://www.php.net/ lesen. Und bei dieser strpos-Konstruktion wird mir ÜBEL!
Hallo Alexander,
Wenn der gesuchte String am Anfang, also ab dem Zeichen mit dem
Index 0 steht, liefert strpos 0 zurück.
Wie ich schon sagte ist das Problem schon bekannt.
Nicht desto trotz nutzen viele die Funktion aber so
ohne die Problematik zu kennen, also wird dieser Eintrag dem
einen oder anderen helfen.
PS: Ich habe keine Ahnung von PHP. Aber ich kann http://www.php.net/ lesen. Und bei dieser strpos-Konstruktion wird mir ÜBEL!
Dann kotz dich mal aus,
für jedes Problem gibts im Netz ein Antwort,
also braucht man deiner Meinung nach kein Forum.
Sehr anmassend von dir, ebenso deine Ausdrucksweise.
NIKKI
Liebe Nicole,
Wie ich schon sagte ist das Problem schon bekannt.
Da besteht kein Problem. Die Funktion arbeitet schon seit einigen PHP-Versionen genauso, wie sie dokumentiert ist.
Nicht desto trotz nutzen viele die Funktion aber so
ohne die Problematik zu kennen,
Was bei dem Entwickeln von Software sträflicher Leichtsinn ist.
also wird dieser Eintrag dem einen oder anderen helfen.
Bestimmt. Nur suchen die wenigsten Leute, die schon im Handbuch nicht nachschauen, auch noch hier im Archiv, also wird Deinen Eintrag niemand von der Zielgruppe lesen.
für jedes Problem gibts im Netz ein Antwort,
Stimmt, für fast jedes.
also braucht man deiner Meinung nach kein Forum.
Hat er nicht gesagt und auch nicht gemeint. Nur von einem Problem in der Funktion zu sprechen, einen Ausweg zu suchen aber nicht im Handbuch nachschlagen, da kann man im Forum nicht so wirklich helfen. ;)
Sehr anmassend von dir, ebenso deine Ausdrucksweise.
Auch wenn ich Alexanders Ausdrucksweise in dem Fall nicht wirklich gut gewählt finde. Anmassend ist es mit Sicherheit nicht. Denn schlicht und ergreifend habt Ihr beide etwas falsch gemacht, was nicht nur zeigt, dass Ihr nicht wisst, welches Ergebnis die Funktion gibt, sondern eben auch, dass Ihr trotz Problems nicht nachgeschlagen habt. ;)
Nichts für ungut.
Gruss, Thoralf