Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

str_replace won't replace arabic characters

Tags:

php

<?php 
$utf8_string = 'مع السلامة مع السلامة مع السلامة مع السلامة مع السلامة مع السلامة مع السلامة السلامة الرائعة على الطويلة ';
echo $utf8_string;
echo'<br/><br/>';

$patterns = array("على", "مع");
$replacements   = array("", "");

$r_string = str_replace($patterns, $replacements, $utf8_string);

//echo $r_string;
print_r ($r_string);
echo'<br/>';
//$words = preg_split( "/ ( |مع|على) /",$r_string);
$words = explode(" ",$r_string);

$num = count($words);
echo 'There are <strong>'.$num.'</strong> words.';
?>

I have this code to count the number of words in an arabic sentence.however i want to remove some words and count the rest.i tried to use str_replace, but this way is counting the number of words of the original sentence. can anyone help me?

like image 986
Pascale Abou Abdo Avatar asked Jul 08 '26 06:07

Pascale Abou Abdo


1 Answers

You could use:

$num = count(
    explode(
        " ", 
        str_replace(
            $word, //Word you want to remove from your text.
            "",
            $string //String you want the word to be removed from.
        )
    )
);

Or even:

$num = count(
    explode(
        " ", 
        str_replace(
            array("word1", "word2", [...]), //Words you want to remove from your text.
            "",
            $string //String you want the word to be removed from.
        )
    )
);

EDIT: As pointed out, the above won't work. I tried pinpointing where the error is, and apparently str_replace can't handle arabic characters, even though explode can. PHP is not reliable with non-ascii characters.

What you can do, alternatively, is:

$num = Count(explode(" ", $utf8_string)) - Count(array_intersect(explode(" ", $utf8_string), $patterns))

It should return the value you want.

You could also try writing your own string replacement function, but I would advice against it, seeing you'd have to manually loop through your array and compare each word. Doing so should take longer to run, and make it much more verbose.


Coming here to warn yall that the correct way to handle this is with the mbstring extension (http://php.net/manual/en/book.mbstring.php). Please use this extension, no the ugly hack/workaround above.

like image 59
Pedro Cordeiro Avatar answered Jul 09 '26 20:07

Pedro Cordeiro



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!