Solved

PHP string search and substitution, works with array, doesn't work with file

Posted on 2008-10-16
5
334 Views
Last Modified: 2012-05-05
I am trying to get a language filter work.  It searches the string to see if any words exist from the array, then it converts them to *.  I can get it to work with an array, however I can't get it to work when I try to use a file.
It is opening the file, it reads in the array, the line that doesn't work is this:
        if (stristr(trim($string),$curse_word)) {
//Foul Language Function Start

function language_filter($string) {

//  Array Works

//  $obscenities = array("curse","word"," foul ","language");
 

//  Array in File Doesn't Work

	$filename = "foul_language.txt";

	$fp = fopen($filename,'r'); 

	if (!$fp) {echo 'ERROR: Unable to open file.'; exit;} 

       $obscenities = @file($filename);

//  Substitute words

    foreach ($obscenities as $curse_word) {

        if (stristr(trim($string),$curse_word)) {

            $length = strlen($curse_word);

            for ($i = 1; $i <= $length; $i++) {

                $stars .= "*";

            }

            $string = eregi_replace($curse_word,$stars,trim($string));

            $stars = "";

        }

    }

    return $string;

}

//Foul Language Function Stop

Open in new window

0
Comment
Question by:baumli1
  • 3
5 Comments
 

Author Comment

by:baumli1
ID: 22732994
The foul_language.txt contains the following lines, but it reads them in as an array properly.
"curse"

curse

 curse 

Open in new window

0
 

Author Comment

by:baumli1
ID: 22733206
It has something to do with the array in the text file.  I thought I could just put one entry per line, but its not reading more then 1 line.  If I just put one word in the file, with no return, it works, but as soon as I put in another line, it stops working.
0
 

Author Comment

by:baumli1
ID: 22733362
I did get it to work, but if someone else has any ideas as to how I should clean it up or impove it, I'll leave the question open.
//Foul Language Function Start

function language_filter($string) {

    $filename = "foul_language.txt";

    $fp = @fopen($filename, 'r'); 

    if ($fp) {  $obscenities = explode("\n", fread($fp, filesize($filename))); }

//  Substitute words

    foreach ($obscenities as $curse_word) {

        if (@stristr(trim($string),$curse_word)) {

            $length = strlen($curse_word);

            for ($i = 1; $i <= $length; $i++) {

                $stars .= "*";

            }

            $string = eregi_replace($curse_word,$stars,trim($string));

            $stars = "";

        }

    }

    return $string;

}

//Foul Language Function Stop

Open in new window

0
 
LVL 8

Accepted Solution

by:
aldanch earned 50 total points
ID: 22736740

function language_filter($string) {

	$badwords = array();

	$badwords = explode("\n", file_get_contents("/path/to/badwords.txt"));

	foreach($badwords as $word) {

		$string = str_replace($word, str_pad("*", strlen($word), "*", STR_PAD_LEFT), $string);

	}

	return $string;

}

Open in new window

0

Featured Post

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Suggested Solutions

This article will explain how to display the first page of your Microsoft Word documents (e.g. .doc, .docx, etc...) as images in a web page programatically. I have scoured the web on a way to do this unsuccessfully. The goal is to produce something …
This article discusses four methods for overlaying images in a container on a web page
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now