点击链接加入群【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/>'; } }