MySQL降龙十八掌,第六掌内容:利涉大川之MySQL索引的使用与优化(附含MySQL8.0隐藏索引),了解详情>>
0

我的帖子

个人中心

设置

  发新话题
<?php
$lenth = 19;
$str = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?";
echo strlen($str)<=$lenth ? $str : (substr($str,0,$lenth).chr(0)."....");
?>
显示:怎么将新闻的很长的....
chr(0)不是null
null是什么都没有,而chr(0)的值是0。表示成16进制是0x00,表示成二进制是00000000
虽然chr(0)不会显示出什么,但是他是一个字符。
当汉字被截断时,根据编码规则他总是要把后边的其他字符拉过来一起作为汉字解释,这就是出现乱码的原因。而值为0x81到0xff与0x00组合始终都显示为“空”
根据这一特点,在substr的结果后面补上一个chr(0),就可以防止出现乱码了 。

function gb2312_substr($str, $limit) {
$restr ='';
for($i=0;$i< $limit-3;$i++) {
$restr .= ord($str[$i])>127 ? $str[$i].$str[++$i] : $str[$i];
}
return $restr;
}
function utf8_substr($str, $limit) {
$restr = '';
for($i=0;$i< $limit-3;$i++) {
$restr .= ord($str[$i])>127 ? $str[$i].$str[++$i].$str[++$i] : $str[$i];
}
return $restr;
}
utf8_substr在utf-8格式中未测试


本帖最近评分记录
  • 七彩极 无忧币 +6 受教了! 2018-4-2 22:58
  • ribut9225 无忧币 +2 谢谢分享 2010-4-11 10:29



本帖最后由 七彩极 于 2018-4-2 22:58 编辑
:Q 做个沙发!路过了!



:(pdd_26): 新手飘过  收藏了



学习这个函数了



好文章,顶上去~!



宝剑厉不厉害,要看它的主人是谁,不信来PHP版块看看~!
提示: 作者被禁止或删除 内容自动屏蔽
‹‹ 上一贴:【已解决】下载中文文件内容乱码   |   下一贴:【教程经验】PHP新人常见问题列表及解决办法第一期 ... ››
  发新话题
快速回复主题
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 友情链接 |意见反馈 | 网站地图
Copyright©2005-2018 51CTO.COM
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系:bbs@51cto.com