WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   php fråga: censurskript (https://www.wn.se/forum/showthread.php?t=14493)

estberg 2006-06-06 18:48

Hej,

Försöker göra ett litet censurskript till en gästbok. Så här ser det ut:


Kod:


# Orden som ska censureras
$censorship = array("en", "bunt", "fula", "ord");

$message = $_POST['message'];

$split = explode("", $message);

# Kollar igenom varje ord i det skrivna fältet
foreach ($censorship as $word)
{
if(in_array($split, $word) === true)
{
echo "Du har använt dig av ett eller flera otillåtna ord. Formulera om ditt inlägg och försök igen.";
}
}


Är osäker på om jag strukturerat upp det fel eller om det är något jag kan ha missat...?

Jonas 2006-06-06 19:29

in_array() är case-sensitiv, så "fula" matchar inte "fUla","Fula","fuLa" osv..

Rekommenderar dig att göra en regexp istället.
Kod:

<?php
$str_badwords = 'detta|är|en|massa|fula|ord';
$message = trim($_POST['message']);

if(preg_match("/(".$str_badwords.")/is", $message))
{
echo "Du har anv&auml;nt dig av ett eller flera otill&aring;tna ord. Formulera om ditt inl&auml;gg och f&ouml;rs&ouml;k igen.";
}
?>


estberg 2006-06-06 21:23

Tack Jonas, det funkar bra nu!

thorsell 2006-06-06 23:00

Eller kan du göra så att alla "fula ord ersätts med [biiip] ;)

Kod:

<?
$inord = "en text som ska kollas";
$notallowed = array("en", "bunt", "fula", "ord");
$totw = count($notallowed)-1;
$repword = Array();
for ($i=0;$i<=$totw;$i++)
{
$notallowed[$i] = '@'.$notallowed[$i].'@si';
$repword[$i] = "[<i>biiip</i>]";
}

$newmsg = preg_replace($notallowed,$repword,$inord);
$inord = $newmsg;

?>



Alla tider är GMT +2. Klockan är nu 17:31.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson