范例:字符串:世纪乐知(北京)网络技术有限公司期待结果:世纪XXX北京)网络技术有限公司
即从第2个字开始隐蔽3个字符,因使用频率很高,希望有一个最高效的方法。当前使用了2次mb_substr拼接的方法,觉得不甚如意,求更合理的方法。

解决方案 »

  1.   


    $str='世纪乐知(北京)网络技术有限公司';
    if($str=='世纪乐知(北京)网络技术有限公司')
    $str='世纪XXX北京)网络技术有限公司';
      

  2.   

    有证据,说明mb_substr,影响到效率了?
      

  3.   

    @yangball
    这是一个foreach,不可能使用判断。@amani11
    没有,只是觉得自写的函数中用了2个mb_substr拼接,假如一个for有50个就等同于用了100次mb_substr,但一个mb_substr又无法实现,所以想看下有没有别的方法。
      

  4.   

    echo substr_replace('世纪乐知(北京)网络技术有限公司', 'XXX', 6, 7);utf8编码。。你可能要根据ord($content{12})是否大于127来判断替换的长度。。
      

  5.   

    preg_replace('(([\w]|[\x{4e00}-\x{9fa5}]{3}){2})(([\w]|[\x{4e00}-\x{9fa5}]{3}){3})(.*?)','\\1XXX\\3',$str);
      

  6.   

    $str=preg_replace('/^(.{2})(.{3})/u','\\1XXX',$str);
    这个就可以了
      

  7.   


    //已测试的
    $str="世纪乐知(北京)网络技术有限公司";
    $str=preg_replace('/^(.{2})(.{3})/u','\\1XXX',$str);
    echo $str;
      

  8.   


    谢谢,效率最高的的确是这个内置函数了,只可惜对中文支持不好,如欲再加判断编码则不如用mb_substr拼接了。刚搜到一个自定义的mb_substr_replace(),也是用mb_substr拼接的。
    http://github.com/Xeoncross/php_utf8/blob/master/utf8.php算了,先这么用着吧。
      

  9.   


    谢谢,这当属最简洁有效的方法了。就是希望尽可能的少在for里使用正则。