Just nu står det still i huvudet och jag hittar inte nåt lämpligt svar (tror jag).
Det jag vill är att en sträng skall sökas igenom efter förbestämda ord och tecken. Vad skall jag använda för kod?
En array är väl lämpligast eftersom det rör sig om flera olika ord. Om ett ord/tecken har hittats i strängen skall en felmeddelande-variabel sättas och inte fortsätta söka efter de andra orden.
Någon vänlig själ som har lust att bidra med hjälp?
Just nu står det still i huvudet och jag hittar inte nåt lämpligt svar (tror jag).
Det jag vill är att en sträng skall sökas igenom efter förbestämda ord och tecken. Vad skall jag använda för kod?
En array är väl lämpligast eftersom det rör sig om flera olika ord. Om ett ord/tecken har hittats i strängen skall en felmeddelande-variabel sättas och inte fortsätta söka efter de andra orden.
Någon vänlig själ som har lust att bidra med hjälp?
Ja man kan väl förmodligen göra det på olika sätt, men om du nu har de förutbestämda orden redan kan du alltid
$str = strtolower(" En massa ord som skall sökas igenom och hittas orden skall en felvariabel sättas");
// $arr[], en array med förbjudna ord..
for($i=0;$i<count($arr);$++) {
if(strpos($str,strtolower($arr[i])) {
$fel = true;
exit; // eller hur man nu vill gå vidare..
}
}
Det beror helt och hållet på hur dina ord och tecken är
Man skulle t ex kunna ha alla förbjudna ord och tecken i en textfil.
ord_tecken.txt
! _ . , ? + / \ ord som är förbjudna och tecken separerade med mellanslag bankstek
läs in filen.
$filename = "/home/fredrik/www/ord_tecken.txt";
$hf = fopen($filename, "r");
$arr = explode(" ", fread($hf, filesize($filename)));
fclose($handle);
$str = strtolower(" En massa ord som skall sökas igenom och hittas orden skall en felvariabel sättas");
for($i=0;$i<count($arr);$++) {
if( strpos($str,strtolower($arr[i]) != false) {
// $fel = true;
exit("Texten innehåller förbjudna tecken");
}
}
Kanske?! Beror ju på hur och var man förvarar sina förutbestämda ord, i en lång sträng, i en extern fil, i en xml fil osv. Så beroende på hur man lagrar sina förutbestämda ord så får man läsa in dem på det sätt som passar bäst.
Här har jag dem i en extern textfil i min root-katalog för siten min på min laptop. Som jag sedan läser in i en variabel som jag sedan splitar in orden och teckena i en array som jag sedan loopar igenom och jämför med orden som finns i min sträng...
hittas ett ord, dör den och visar "Texten innehåller förbjudna tecken"
Jag fick göra några små ändringar för att det skulle fungera... Några tecken saknades här och var. Var får du fclose($handle) ifrån? Den är ju inte definierad tidigare. Det borde vara fclose($hf).
Så här ser det ut nu:
$filename = "forbidden_word-characters.txt";
$hf = fopen($filename, "r");
$arr = explode(" ", fread($hf, filesize($filename)));
fclose($hf);
$str = strtolower("En massa ord som skall sökas igenom och hittas orden skall en felvariabel sättas/skrivas. Blanksteg");
for($i=0;$i<count($arr);$i++) {
if( strpos($str,strtolower($arr[i]) != false )){
// $fel = true;
$spam_warning = "1";
exit("Texten innehåller förbjudna tecken");
}
}
if($spam_warning=='1'){
echo "Ditt meddelande kunde inte sparas då det har uppfattats som spam!";
}
else{
echo "Ditt meddelande har sparats!";
}
och txt-filen:
! _ . , ? + / ord som är förbjudna och tecken separerade med mellanslag blanksteg
Jag fick göra några små ändringar för att det skulle fungera... Några tecken saknades här och var. Var får du fclose($handle) ifrån? Den är ju inte definierad tidigare. Det borde vara fclose($hf).
Så här ser det ut nu:
$filename = "forbidden_word-characters.txt";
$hf = fopen($filename, "r");
$arr = explode(" ", fread($hf, filesize($filename)));
fclose($hf);
$str = strtolower("En massa ord som skall sökas igenom och hittas orden skall en felvariabel sättas/skrivas. Blanksteg");
for($i=0;$i<count($arr);$i++) {
if( strpos($str,strtolower($arr[i]) != false )){
// $fel = true;
$spam_warning = "1";
exit("Texten innehåller förbjudna tecken");
}
}
if($spam_warning=='1'){
echo "Ditt meddelande kunde inte sparas då det har uppfattats som spam!";
}
else{
echo "Ditt meddelande har sparats!";
}
och txt-filen:
! _ . , ? + / ord som är förbjudna och tecken separerade med mellanslag blanksteg
Dvs. som du skrev...
Oavsett vad jag skriver så fungerar det inte.
Ta hänsyn till fel i koden... helt otestad! får kalla det trött.. :) skall kolla upp det där sen.. nu är det natti natt.. såklart, det skall vara $hf .. :)
Så klart det inte funkade.. herr jag var i nattmössan..
Denna som jag skrivit hittar i alla fall de ord som man har definerat i en textfil.
<?php
$fileurl = "/home/fredrik/www/ord_tecken.txt";
$hf = fopen($fileurl,"r") or die("kan inte öppna filen!");
$content = fread($hf, filesize($fileurl)) or die("Fel!");
$arr = split(" ",strtolower($content));
fclose($hf);
$str = "din detta är en text";
$str1 = "testar en massa för att se om detta test går igenom.";
$str2 = "hittar inte ord i mig";
preg_match_all('/"[^"]+"|[^"\s,]+/', strtolower($str2), $Tokens);
function checkwords($word, $array) {
if(in_array($word,$array)) {
return true;
} else {
return false;
}
}
for($i=0;$i<count($arr);$i++) {
if(checkwords($arr[$i],$Tokens[0]) == true) {
echo "hittade ordet";
exit();
}
}
echo "<pre>";
echo var_dump($Tokens);
echo "</pre>";
?>
Jo, jag såg det i slutet... Jag var lite för snabb på att svara. Nu fungerar det bättre ;) Däremot så får jag inte det att fungera med [ och ]. Jag har lagt in dem i text-filen och la till denna rad i php-filen:
Om nåt av de "förbjudna" orden eller tecken finns med så skall meddelandet registreras som spam. Just nu har jag olika status för inläggen. Antingen så klarar de kontrollen, eller så är det troligen spam och sen de IP-adresser som redan blivit blockerade kan inte skriva över huvudtaget. Namn, e-post, hemsida och inlägget skall sökas igenom för de som inte är inloggade. Allt är klart bortsett från att spamskyddet har börjat strula.
Därför jag vill ha ett nytt och det du skriver fungerar bra bortsett från att skriptet inte hittar ordet om det inte står ensamt.
<?php
$fileurl = "/home/fredrik/www/ord_tecken.txt";
$hf = fopen($fileurl,"r") or die("kan inte öppna filen!");
$content = fread($hf, filesize($fileurl)) or die("Fel!");
$arr = split(" ",strtolower($content));
fclose($hf);
$str = "dindetta är en text";
$str1 = "testar en massa för att se om detta test går igenom.";
$str2 = "hittar inte ord i mig";
for($i=0;$i<count($arr);$i++) {
if (preg_match("/$arr[$i]/i",$str)) {
print "Ordet <b>$arr[$i]</b> i <i>$str</i> är
förbjudet!";
exit;
}
}
?>
Plockar din i t ex dindetta .. kanske du har lite att gp efter
vissa tecken inom regexp är "förbjudna" att använda om man inte escapar dem så att den skall tolka dem som vanliga tecken och inte en del av formulan som för att upptäcka strängar.
i ditt fall när vi har httpimitation-rolex.-replicas.org/index.htmlr 24 day
så blir sökmönstret för just denna på liknande sätt: httpimitation-rolex\.-replicas.org/index\.htmlr 24 day
för att den just skall träffa . också, annars betyder . = Träffar på vilket tecken som helst utom \n
269 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9