03. marts 2007 - 18:54Der er
13 kommentarer og 1 løsning
erstat grimme ord
denne kode udskifter grimme ord i en tekst med pænere ord eller *** alt efter hvad der står i tabellen ban.
$ban = mysql_query("SELECT p_ord, g_ord FROM ban ORDER BY banid"); while($rs = mysql_fetch_array($ban)) { $bad[]= $rs['g_ord']; $good[]=$rs['p_ord']; } $ban_over = str_replace($bad, $good, $over); $ban_tekst = str_replace($bad, $good, $tekstenen);
problemet er at hvis der i tabellen står "dumme" og ordret Dumme, DUMME fremkommer i teksten bliver det ikke erstattet. kort sagt hvis ordret i feltet g_ord i datbasen ikke matcher ordret i teksten 100% bliver det ikke erstattet. Hvordan gør jeg så den kun kigger på stavemåden og ikke store/små bogstaver?
jeg kan ikke lige få den funktion til at spille som jeg godt vil. til coderdk jeg skal bruge preg_replace, men ved ikke helt hvordan jeg skal gøre det da de eneste eksempler jeg kan finde indeholder en masse Regulære udtryk
jeg erstattede $ban_tekst = preg_replace( $bad, $good, $teksten ); med $ban_tekst = preg_replace( $bad, $good, $tekstenen ); men det erstatter ingenting. heller ikke hvis ordet i tabellen matcher 100%
Ja den virker fint min kode ser lige nu sådan ud. men hvis jeg har ordet "dum" i g_ord og skriver DUM i forummet bliver det ikke erstattet
$traaden = mysql_query("SELECT * ,DATE_FORMAT(dato, '%d') AS dato, DATE_FORMAT(dato, '%m') AS maaned, DATE_FORMAT(dato, '%Y') AS aar, DATE_FORMAT(dato, '%H:%i:%s') AS tid FROM forumtraad WHERE traadID = $traad AND spg = '0'") or die(mysql_error()); while ( $a = mysql_fetch_array($traaden)) { $id = $a[traadID]; $overskrift = $a[overskrift]; $nyover = htmlentities($overskrift); $over = nl2br("$nyover");
//tjekker hvilke ord der ikke er tilladte og erstatter med andre $ban = mysql_query("SELECT p_ord, g_ord FROM ban ORDER BY banid"); while($rs = mysql_fetch_array($ban)) { $bad[]= "/" . preg_quote( $rs['g_ord'], "/" ) . "/i"; $good[] = $rs['p_ord']; } $ban_over = preg_replace( $bad, $good, $over ); $ban_tekst = preg_replace( $bad, $good, $tekst ); //tjek slut
gør netop at det er ligegyldigt om der står "dum", "dUm", "DUm", "DUM, eller "duM" :) /i betyder case insensitive... Så det burde efter min bedste overbevisning virke... Det *er* $ban_tekst og $ban_over du udskriver, ikke?
coderdk dit forslag virker, det var mig som sad og testede på den forkerte side. Jeg havde lavet en test side for at teste, men tjekkede om det virkede på den side jeg ikke rettede på. kort sagt en fejl 40 fra min side. Bare kom med et svar. Tak for hjælpen
Er i gang med noget af det samme, bare i ASP. Er der nogle af jer der har en liste med "de grimme ord", så der er noget at fodre databasen med fra starten?
jeg har ikke tilføjet nogen endnu. Tilføjer dem hen af vejen hvis det bliver et problem
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.