webForumDet fria alternativet

Sök efter ett ord i en text

PHPur PHP

19 svar · 900 visningar · startad av filipbh

Medlem sedan juli 2002405 inlägg
Frågan#1

Om jag skriver in en text i ett formulär och klickar på exempelvis "skicka" så vill jag att det ska sökas efter ett speciellt ord eller några olika ord. Om de orden finns med ska en uppgift köras..

Någon som hänger med? :p

Ex.
fil1.php innehåller ett formulär
När man klickar på "Skicka" så går det till fil2.php

fil2.php kollar igenom texten man skrev i formuläret i fil1.php och letar efter t.ex. "hora". Finns ordet hora med ska det skapas en fil i en annan tabell som visar att det kommit ett inlägg med ett "fult" ord.

Medlem sedan juni 20015 009 inlägg
#2
$ord = "Innehåller den här strängen svärord?";
$var = strrchr($ord, "svärord");

if(!$var == FALSE) {
   print("Ja, den innehåller svärordet: " . $var . "<p/>");
} else {
   print("Inga svärord i den här strängen");
}

Läs mer om strrchr här http://se.php.net/strrchr

Medlem sedan juli 2002405 inlägg
#3

Tack... Hur gör man om det är flera ord som ska kollas igenom då?

Medlem sedan okt. 20023 030 inlägg
#4
$svordommar = Array("svordom", "svärord");
$ord = "Innehåller den här strängen svärord?";

foreach ($svordommar as $val) {
    $var = strrchr($ord, $val);
    if (!$var == FALSE) {
        print("Ja, den innehåller svordommen: " . $val . "(" . $var . ")");
        break;
    }
}

if ($var == FALSE) {
    print("Inga svordommar i den här strängen");
}

Kanske? Var länge sen man höll på med php. :)

Medlem sedan juli 2002405 inlägg
#5

Testade nu men det ville inte fungera.. Gjorde man om $ord till en annan text visade den ändå fel och skrev något ord eller bokstav. Tycker det ser okej ut men något måste vara fel...

Medlem sedan juli 2002405 inlägg
#6

Eller måste man rensa Arrayen? För det står att "svordom" finns med igen. Men det finns ju inte efter jag tog bort det.

Hur rensar man den isåfall?

Medlem sedan dec. 2003153 inlägg
#7

Gör såhär:

$svordommar = Array("svordom", "svärord");
$ord = "Innehåller den här strängen svärord?";

foreach ($svordommar as $val) {

    if (strpos($ord, $val) !== FALSE) {
        $var = TRUE;
        echo "Ja, den innehåller svordommen: " . $val;
    }
}

if ($var === FALSE) {
    print("Inga svordommar i den här strängen");
}
Medlem sedan juli 2002405 inlägg
#8

"Inga svordommar i den här strängen" kom inte upp när det inte fanns några.. Annars fungerade det bra. Det behövs inte komma upp heller direkt för det ska bara hända en sak OM det finns med... Så tack för hjälpen

Medlem sedan dec. 2003153 inlägg
#9

Jaså? Jag testade den på strängen "Mors lilla olle" och då fick jag "Inga svordommar i den här strängen". Men om det funkar i övrigt så...

Medlem sedan juli 2002405 inlägg
#10

Skumt att det inte fungerade för mig då...

Medlem sedan juli 2002405 inlägg
#11

Så här ser det nu... Men det skrivs ändå ut att ordet finns med.

$bot_check = $_POST['inlagg'];

$bot_check = strtoupper($bot_check);

$var = strrchr($bot_check, "ORDET");

if(!$var == FALSE) {

srand((double)microtime()*1000000);
$rand_tal = rand(1,25) - 1;

require("fil.php");

Om vi använder "ORDET" och har texten "Ortodoxa kyrkor" så säger den att "ORDET" finns med för att "Or" i "Ortodoxa" finns. Den ska ju bara skriva ut om HELA ordet finns med. Inte bara delar av ordet.

Den skriver dock ut OM det finns med.. Vilket den ska göra.

Medlem sedan apr. 20012 427 inlägg
#12

Jag skrev en liten funktion som du kanske kan använda/utveckla:

function contains_bad_words($s) {

	$a_bad_words = array('foo', 'bar');

	foreach ($a_bad_words as $word) {
		if (preg_match('/\\b'.$word.'\\b/i',$s)) return true;
	}
	return false;
}

$approved = contains_bad_words('Detta är en teststräng som innehåller foo');
Medlem sedan apr. 20012 427 inlägg
#13

Avvakta lite, jag tror inte den fungerar riktigt. :r

Medlem sedan juli 2002405 inlägg
#14

Okej, avvaktar... :p

Medlem sedan apr. 20012 427 inlägg
#15

Ok, det var forumet som av någon anledning strippade bort backslashar från inlägget så "mönstret" blev fel. Jag bifogar koden i en textfil.

RED: Koden i mitt förra inlägg är nu också fixad.

Medlem sedan juli 2002405 inlägg
#16

Vad påverkar $s? Visst kan man väl skriva onLoad="function contains_bad_words();" i body-taggen för att den ska ladda? Den ligger nämligen inte på samma sida som där man skriver själva texten... Och hur ska man klämma in i koden att den ska utföra en grej om orden finns med?

Medlem sedan apr. 20012 427 inlägg
#17

$s innehåller strängen du skickar till funktionen. Och, nej, du kan inte manipulera PHP med klientskript (som t.e.x JavaScript).

Medlem sedan juli 2002405 inlägg
#18

Hur ska jag anropa den då?

Medlem sedan apr. 20012 427 inlägg
#19

Om man tar den kod du postade ovan så blir det väl någonting sådant här:

function contains_bad_words($s) {

    $a_bad_words = array('foo', 'bar');

    foreach ($a_bad_words as $word) {
        if (preg_match('/\\b'.$word.'\\b/i',$s)) return true;
    }
    return false;
}

$bot_check = $_POST['inlagg'];

if (!contains_bad_words($bot_check)) {
	srand((double)microtime()*1000000);
	$rand_tal = rand(1,25) - 1;
	require("fil.php");

Nu finns inget avslut på den sista if-satsen, men jag antar att det var medvetet?

Medlem sedan juli 2002405 inlägg
#20

Ja, det är lite mer därtill men det var inte nödvändigt att med för denna kodsnutt. Men hur fungerar det när $bot_check = $_POST['inlagg'] kommer så pass långt ner.. $_POST['inlagg'] är väl $s?

149 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
146 ms — hämta tråd, inlägg och bilagor (db)