php 限制标题长度,将一个中文转换成一个字符

点击链接加入群【php/web 学习课堂】:https://jq.qq.com/?_wv=1027&k=5UJ9vEa

欢迎大家加入,一起讨论学习

 

 

玩这个功能的时候,我们要注意一点,我们是用中文的,有时候还有一些数据,是英文+中文,所以我们中国程序猿是很苦逼的。光学个代码,还都是英文,对于我们这种爱国主义,特难受。。。

 

中文字符在PHP里,一个中文是占3个字符串的,给大家一个例子:

$sta='abc';      那我们打印看一下长度 echo  substr($sta) ;    会看到,长度是3

$sta='我';   换成中文,也能看到,一个中文打印 3 

 

感谢参考:https://zhidao.baidu.com/question/233460627.html

 

以下是我处理过后的代码,做了一个小小的演示,给大家看看效果

 

 

<?php

// header() 解决中文乱码
header('Content-type:text/html;charset=utf-8');

//将一个中文转换成一个字符
function abslength($str)
{
    if(empty($str)){
        return 0;
    }
    if(function_exists('mb_strlen')){
        return mb_strlen($str,'utf-8');
    }
    else {
        preg_match_all("/./u", $str, $ar);
        return count($ar[0]);
    }
}
//从中文里提取字符
function utf8_substr($str,$start=0) {
    if(empty($str)){
        return false;
    }
    if (function_exists('mb_substr')){
        if(func_num_args() >= 3) {
            $end = func_get_arg(2);
            return mb_substr($str,$start,$end,'utf-8');
        }
        else {
            mb_internal_encoding("UTF-8");
            return mb_substr($str,$start);
        }

    }
    else {
        $null = "";
        preg_match_all("/./u", $str, $ar);
        if(func_num_args() >= 3) {
            $end = func_get_arg(2);
            return join($null, array_slice($ar[0],$start,$end));
        }
        else {
            return join($null, array_slice($ar[0],$start));
        }
    }
}

//先放一堆数据,模拟一下从数据库里提取出来的
$sta = array(
    0=>array(
        'title' => '点击链接加入群【php/web 学习课堂】:https://jq.qq.com/?_wv=1027&k=5645xiw'
    ),
    1=>array(
        'title' => '每个人都能成为强者,关键看你能否以强者的标准来严格要求自己'
    ),
    2=>array(
        'title' => '如果你失忆了,希望你能想起曾经为了追求梦想的你。'
    )
);

//遍历数组
foreach($sta as $k => $v){
    //判断长度
    if(abslength($v['title'])>25){
        //输出数据
        echo utf8_substr($v['title'],0,25).'...<br/><br/>';
    }else{
        echo $v['title'].'<br/><br/>';
    }
}

 

posted on 2017-12-26 17:13  幸享龙枫  阅读(1366)  评论(0编辑  收藏  举报

导航