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/>';
}
}