PHP 100%支持UTF-8中文字符替换 ~ 学习分享

 

经过测试 php5.2 5.3 5.4 5.5都不支持 替换不完全

 

5.6 7.0 7.3支持

/**
 * @param $str 规定被搜索的字符串
 * @param $find 规定要查找的值
 * @param $replace 规定替换的值
 * @return string 返回替换的结果
 */
function utf8_str_replace($str,$find,$replace){
    # 记录位置
    $strpos = 0;
    # 储存替换的字符串
    $strstr = $str;
    # $find在$str中查找到的次数
    $count = mb_substr_count($str,$find,"utf-8");
    # 遍历替换
    for ($i=0;$i<$count;$i++){
        # 获取当前查找到的字符位置
        $strpos = mb_strpos($strstr,$find,$strpos,"utf-8");
        # 获取查找的值的长度
        $chr_len = mb_strlen($find,"utf-8");
        # 截取字符前面部分
        $first_str = mb_substr($strstr,0,$strpos,"utf-8");
        # 截取字符后面部分
        $last_str = mb_substr($strstr,$strpos+$chr_len);
        # 拼接字符串
        $strstr = $first_str.$replace.$last_str;
        # 计算下次的位置
        $strpos+=mb_strlen($replace,"utf-8");
    }
    return $strstr;
}
echo mb_strlen('平台可以依照与卖家签署的协议中相关约定及平台开放平台规则扣除相应金额的保证金作为违约金或给予买家的赔偿', 'utf-8');



$str = utf8_str_replace('rfasjfasf<dfd>平台可以依照与卖家签署的协议中相关约定及平台开放平台规则扣除相应金额的保证金作为违约金或给予买家的赔偿<d.fj',
                 '平台可以依照与卖家签署的协议中相关约定及平台开放平台规则扣除相应金额的保证金作为违约金或给予买家的赔偿'
                ,'Платформа может вычесть соответствующую сумму гарантийного депозита в качестве заранее оцененного убытка или компенсации покупателю в соответствии с соответствующим соглашением в соглашении, подписанном с продавцом, и правилами открытой платформы платформы.');

echo $str;
die();