Heim > php教程 > php手册 > Hauptteil

PHP截取中文字符串,无乱码,基于正则

WBOY
Freigeben: 2016-06-06 19:35:44
Original
1526 Leute haben es durchsucht

多数网上的PHP中文字符串截取,计算长度用的是逐个字符遍历的方法,看起来比较复杂 这里提供哦你一种基于正则的解决方案,GBK,UTF-8的中文字符串测试通过 无 ?php/** * @brief strlen_mb 计算字符串长度,支持中文,自动检测编码,UTF-8与GBK测试通过 * * @p

多数网上的PHP中文字符串截取,计算长度用的是逐个字符遍历的方法,看起来比较复杂
这里提供哦你一种基于正则的解决方案,GBK,UTF-8的中文字符串测试通过
<?php

/**
 * @brief strlen_mb 计算字符串长度,支持中文,自动检测编码,UTF-8与GBK测试通过
 *
 * @param $str
 *
 * @return 
 */
function strlen_mb($str){
    $mb_len = mb_detect_encoding($str) == 'UTF-8' ? 2 : 1;
    $patt = '/([\x00-\x7f]|[\x80-\xff].{' . $mb_len . '})/';
    $match = preg_match_all($patt, $str, $groups);
    if($groups){
        return count($groups[0]);
    }else{
        return false;
    }
}

/**
 * @brief substr_mb 截取字符串,中文防乱码,自动检测编码,UTF-8与GBK测试通过
 *
 * @param $str
 * @param $start
 * @param $len
 *
 * @return 
 */
function substr_mb($str, $start, $len){
    $mb_len = mb_detect_encoding($str) == 'UTF-8' ? 2 : 1;
    $patt = '/([\x00-\x7f]|[\x80-\xff].{' . $mb_len . '}){' . $len . '}/';
    preg_match($patt, $str, $groups);
    if($groups){
        return $groups[0];
    }else{
        return false;
    }
}

echo '<meta charset=utf-8>';
$str = '北京dd欢迎你';
for($i = 0; $i <= strlen_mb($str); $i++){
    var_dump(substr_mb($str, 0, $i));
}
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage