Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

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

Posted on 2008-10-16
5
337 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

Networking for the Cloud Era

Join Microsoft and Riverbed for a discussion and demonstration of enhancements to SteelConnect:
-One-click orchestration and cloud connectivity in Azure environments
-Tight integration of SD-WAN and WAN optimization capabilities
-Scalability and resiliency equal to a data center

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Things That Drive Us Nuts Have you noticed the use of the reCaptcha feature at EE and other web sites?  It wants you to read and retype something that looks like this.Insanity!  It's not EE's fault - that's just the way reCaptcha works.  But it is …
Build an array called $myWeek which will hold the array elements Today, Yesterday and then builds up the rest of the week by the name of the day going back 1 week.   (CODE) (CODE) Then you just need to pass your date to the function. If i…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
The viewer will learn how to dynamically set the form action using jQuery.

791 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