• 全国400电话网上服务平台
    强大号码库资源任选,方便,快捷,快速开通。
    咨询热线:400-1100-266  

    dedecms字符串截取函数怎么用
    POST TIME:2021-05-22 23:48

    dedecms 的cn_substr_utf8字符串截取函数商榷

    在phpsir看到的这篇文章,主要是说下dedecms 的cn_substr_utf8函数好像有些问题,研究dedecms的朋友可以看下

    在dedecms里面 cn_substr_utf8 函数是这样的

    代码如下:

    /**
    * utf-8中文截取,单字节截取模式
    *
    * @access public
    * @param string $str 需要截取的字符串
    * @param int $slen 截取的长度
    * @param int $startdd 开始标记处
    * @return string
    */
    if ( ! function_exists('cn_substr_utf8')) {
    function cn_substr_utf8($str, $length, $start=0) {
    if(strlen($str) < $start+1) {
    return '';
    }
    preg_match_all("/./su", $str, $ar);
    $str = '';
    $tstr = '';
    </p> <p> //为了兼容mysql4.1以下版本,与数据库varchar一致,这里使用按字节截取
    for ($i=0; isset($ar[0][$i]); $i++) {
    if(strlen($tstr) < $start) {
    $tstr .= $ar[0][$i];
    } else {
    if(strlen($str) < $length + strlen($ar[0][$i]) ) {
    $str .= $ar[0][$i];
    } else {
    break;
    }
    }
    }
    return $str;
    }
    }
     

    其中

    代码如下:

    if(strlen($str) < $length + strlen($ar[0][$i]) )
    

    一行可能会造成截取后多了一个字符,可以考虑改为

    代码如下:

    if(strlen($str) < $length + strlen($ar[0][$i]) -1 )
    

    测试代码如下

    代码如下:

    $f = "你好fasdfa你fasdf#e#";
    $pos = strpos($f,'#e#');
    var_dump($pos);
    var_dump(cn_substr_utf8($f,$pos));
    var_dump(cn_substr_utf82($f,$pos));
    </p> <p>function cn_substr($str, $slen, $startdd=0) {
    global $cfg_soft_lang;
    if($cfg_soft_lang=='utf-8') {
    return cn_substr_utf8($str, $slen, $startdd);
    }
    $restr = '';
    $c = '';
    $str_len = strlen($str);
    if($str_len < $startdd+1) {
    return '';
    }
    if($str_len < $startdd + $slen || $slen==0) {
    $slen = $str_len - $startdd;
    }
    $enddd = $startdd + $slen - 1;
    for ($i=0;$i<$str_len;$i++) {
    if($startdd==0) {

    
    关于我们 | 付款方式 | 建站知识 | 增值服务 | 网站模板
    Copyright © 2003-2016
    时间:9:00-21:00 (节假日不休)
    版权所有:巨人网络(扬州)科技有限公司
    总部地址:江苏省信息产业基地11号楼四层
    《增值电信业务经营许可证》 苏B2-20120278
    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信

    微信号已复制,请打开微信添加咨询详情!