Avatar billede lakana Nybegynder
15. september 2006 - 15:13 Der er 18 kommentarer og
1 løsning

Erstatte et ord med stjerner

Hejsa

Jeg er igang med at lave et ordfilter i php, jeg skal have sådan at den erstatte bogstaverne præcist med *

Altså hvis vi har ordet Grimme svin feks..

så skal det bliver til ****** ****.

Noget i kan hjælpe med?
Avatar billede jakobdo Ekspert
15. september 2006 - 15:20 #1
Prøv at kig på funktionen: str_replace()
Og bruger du php5, så str_ireplace()
Avatar billede lakana Nybegynder
15. september 2006 - 15:20 #2
kan ikke komme videre
$tekst = "Ååh... dit fucking svin, du skal bare dø idiot!";
$ord = array("fuck","idiot","svin");

$hmm = str_replace($ord, strlen($ord),
'

kan du ikke hjælpe med de rigtige script
Avatar billede fixxxer Nybegynder
15. september 2006 - 15:33 #3
Du har fat i noget af det rigtige..


$filtertekst = '!"#¤%&/()=?!"#¤%&/()=?!"#¤%&/()=?'; /* erstat med en masse stjerner hvis du hellere vil det */
$tekst = "Ååh... dit fucking svin, du skal bare dø idiot!";
$bandeord = array("fuck"=>,"idiot","svin");

foreach ($bandeord as $ord) {
    echo str_replace($ord, substr($filtertekst, 0, strlen($ord)), $tekst);
}

Utestet, så der kan være sneget sig en tastefejl ind..
Avatar billede fixxxer Nybegynder
15. september 2006 - 15:34 #4
Baah.. kluddermudder.

$filtertekst = '!"#¤%&/()=?!"#¤%&/()=?!"#¤%&/()=?'; /* erstat med en masse stjerner hvis du hellere vil det */
$tekst = "Ååh... dit fucking svin, du skal bare dø idiot!";
$bandeord = array("fuck", "idiot", "svin");

foreach ($bandeord as $ord) {
    echo str_replace($ord, substr($filtertekst, 0, strlen($ord)), $tekst);
}
Avatar billede lakana Nybegynder
15. september 2006 - 15:56 #5
den skal jo sætte stjerne ud fra fx fuck
der er 4 cifre = ****

svin er også på 4 cifre = ****
idiot = 5 cifre = *****
Avatar billede fixxxer Nybegynder
15. september 2006 - 16:11 #6
Og det gør mit eksempel ikke?


$filtertekst = '***********************************'; /* en masse stjerner så substr har noget at tage af */
$tekst = "Ååh... dit fucking svin, du skal bare dø idiot!";
$bandeord = array("fuck", "idiot", "svin");

foreach ($bandeord as $ord) {
    echo str_replace($ord, substr($filtertekst, 0, strlen($ord)), $tekst);
}
Avatar billede Slettet bruger
15. september 2006 - 16:19 #7
<?
function str($length, $char)
{
  for($i=0; $i<$length; $i++)
  {
    $returnval .= $char;
  }
  return $returnval;
}
function removeWords($string, $words, $replacechar)
{
  foreach ($words as $word)
  {
    $string = str_replace($word, str(strlen($word),$replacechar), $string);
  }
  return $string;
}
?>

Det er ikke testet.
Avatar billede Slettet bruger
15. september 2006 - 16:20 #8
$tekst = "Ååh... dit fucking svin, du skal bare dø idiot!";
$bandeord = array("fuck", "idiot", "svin");

foreach ($bandeord as $ord) {
    echo str_replace($ord, str_repeat('*', strlen($ord)), $tekst);
}

I eksemplet med stjerner er denne lidt nemmere, men fixxxers er da helt korrekt
Avatar billede Slettet bruger
15. september 2006 - 16:20 #9
Du bruger det sådan her:
<?
$streng = "hej din fede ko";
$ord = array("hej","ko");
$cleaned = removeWords($streng, $ord, "*");
?>
Avatar billede Slettet bruger
15. september 2006 - 16:23 #10
function replaceSwearing($myText, $swearWords = array()) {
    foreach($swearWords as $swearWord) {
        $myText = str_replace($swearWord, str_repeat('*', strlen($swearWord)), $myText);
    }
    return $myText;
}

Den er testet og virker som den skal.
Avatar billede Slettet bruger
15. september 2006 - 16:23 #11
echo replaceSwearing("Ååh... dit fucking svin, du skal bare dø idiot!", array('svin', 'fuck'));

Vil udskrive:

Ååh... dit ****ing ****, du skal bare dø idiot!
Avatar billede Slettet bruger
16. september 2006 - 10:39 #12
Wicez: Det er præcis det samme som min gør, samme metode osv.. :) bare 2 minutter senere  :D
Avatar billede Slettet bruger
16. september 2006 - 11:04 #13
Du laver bare din egen str_replace.. ;o)
Avatar billede lakana Nybegynder
04. oktober 2006 - 15:50 #14
svar
Avatar billede fixxxer Nybegynder
04. oktober 2006 - 15:54 #15
Jeg springer over
Avatar billede jakobdo Ekspert
04. oktober 2006 - 15:56 #16
Heller ikke point til mig.
Avatar billede Slettet bruger
04. oktober 2006 - 16:25 #17
Nu føler jeg næsten det vil være uhøfligt af mig at takke ja ;o)
Avatar billede Slettet bruger
04. oktober 2006 - 20:31 #18
:P
Avatar billede jakobdo Ekspert
05. oktober 2006 - 09:20 #19
Jeg legede lige lidt videre med jeres løsninger og kom op med:

<?php

$tekst = "Ååh... dit fucking svin, du skal bare dø idiot!";
$badWord = array('fuck','idiot','svin');

function replaceSwearing($text, $words = array(), $mask = '*', $full = false)
{
    //text  = Tekst som skal søges igennem
    //words = Ord som skal erstattes
    //mask  = Tegn som ord erstattes med
    //full  = Er full sat = true, så er det kun hele ord der erstattes, f.eks. FUCK men ikke FUCKING
   
    $bound = '';
    if($full)
    {
        $bound = '\\b';
    }

    foreach($words as $word)
    {
        $text = preg_replace('/'.$bound.$word.$bound.'/', str_repeat($mask, strlen($word)), $text);
    }

    return $text;
}

echo replaceSwearing($tekst,$badWord);

?>

Nogle indsigelser?
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester