找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1266|回复: 0

[分享] 织梦dedecms对任意字段截取固定值并且多余部分用省略号代替

[复制链接]
发表于 2018-7-29 09:17:37 | 显示全部楼层 |阅读模式 来自 河南省新乡市
utf8编码下:中文占 3个字节,英文和数字占 1个字节(可变编码)(变长编码)

gbk编码下:所有的中文、英文、数字都占2个字节(定长编码)

例如,有一个字符串,$str = “地方见21423435过很多苦法dsfsdfsdgsd规和地方给iu”

如果是gbk编码:截取5个字符 ,相当于截取10个字节  substr()截取的是字节数

如果是utf8编码的话:截取5个字符:不知道截取多少个字节,因为不确定是中文还是英文

那么怎么判断呢?

通常根据一个字符的第一个字节,如果这个字节 的ASCII码 大于224 占3个字节,如果第一个字节的ASCII码,大于192 占2个字节,如果第一个字节的ASCII码小于192,占1个字节


在include下的extend.func.php文件中加入以下函数:

  1. function GetPartStr($str,$len)//$str字符串   $len 控制长度
  2. {
  3.   $one=0;
  4.   $partstr='';
  5.   for($i=0;$i<$len;$i++)
  6. { $sstr=substr($str,$one,1);
  7. if(ord($sstr)>224){
  8. $partstr.=substr($str,$one,3);
  9. $one+=3;
  10. }elseif(ord($sstr)>192){
  11. $partstr.=substr($str,$one,2);
  12. $one+=2;
  13. }elseif(ord($sstr)<192){
  14. $partstr.=substr($str,$one,1);
  15. $one+=1;
  16. }
  17. }
  18. if(strlen($str)<$one){
  19.    return $partstr;}else{
  20. return $partstr.'....';
  21. }
  22. }
复制代码


调用方法如下,比如要对电话号码的一个字段进行截取,前三位显示,后面的用....代替,写法:

[field:tel function=GetPartStr(@me,3)/]


发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-5-22 15:49 , Processed in 0.038521 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表