douluchuo0801 2012-11-30 13:06
浏览 135
已采纳

str_replace不会替换阿拉伯字符

<?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?

  • 写回答

3条回答 默认 最新

  • doumeng1089 2012-11-30 13:11
    关注

    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.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿
  • ¥15 Matlab在app上输入带有矩阵形式的初始条件发生错误
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址