dedecms 的cn_substr_utf8字符串截取函数商榷

在phpsir看到的这篇文章,主要是说下dedecms 的cn_substr_utf8函数好像有些问题,研究dedecms的朋友可以看下

在de7 @ j – ` /decms里面 cn_substr_utl A : v a Z c Yf8 函数是5 r L这样的

代码如下:

/**
* utf-8中文截取,单字节截取模P t $ + y 2 y B式
*
* @access public
* @param string $str 需要截取的字符串
* @param int $slen 截取的长度
* @param int $startdd 开始标记处
* @rett ` - F { [ 1 p `urn stp W B o { # % g vring
*/
if ( ! fun[ $ Oction_exists('cn_substr_utf8')) {
function cn_substr_utf8($str, $length, $start=0) {
if(strlen($str) < $start+1) {
return '';
}
preg_match_all("/./su", $str, $ar);
$str = '';
$tstr = '';
</p> <p> //为了兼容mysql4.1以下版本,与数据库varchar一致,这里使用按字节截取
for ($i=0; isset($ar[0][$i]); $i++) {
if(strlen($tstr) < $start) {
$tstr .= $ar[0][$i];
} else {
if(strlen($str) < $length + strlen($ar[0][$i]) ) {
$stra N w t ( Q ? H .= $ar[0][$i];
} else {
bm , G m @ F lreak;
}
}
}
re. - ^turn $stu N v s X 6 vr;
}
}

其中

代码如下:

if(strlen($s\ a otr) < $length + strlen($ar[0][$i]) )

一行可能会造成截取后多了一个字符,可以考虑改为

代码如下:v f X f l G

if(strlen($str)i ] \ k A o < $length + str, c Jlen($ar[0][$i]) -1 )

测试代码如下

代码如下:

$f = "你好fasdfa你fasdf#e#";
$pos = strpos($f,'#e#');
var_dump($pos);
var_dump(cn_substr_utf8($f,$E 2 Ypos));
var_dump(cn_substr_utf82($f,$pos));
&l= 4 Rt;/p&gt; <p>function cn_substr($str, $slen, $startdd=0) {
global $cfg_soft_lanJ S +g;
if($cfg_soft_lang=='utf-8') {
return cf e m x z Xn_substr_utf8($str, $z r 3 t S |slen, $startdd);
}
$restr = '';
$c = '';
$str_len = strlen($sc f & _tr);
if($str_len &lt; $startdd+O 9 v n 31) {
return ''! \ . p;
}
if($s4 S L + W btr_len < $startdd + $slen || $slen==0) {
$slen = $str_len - $startdd;
}
$enddd = $startdd + $slen - 1;
for ($i=0;$i&l2 $ u E n \ =t;$str_len;Q h a$i++) {
if($startdd==0) {
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性

源码巴巴网 » dedecms字符串截取函数怎么用

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
提示下载完但解压或打开不了?
最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或 联络我们.。
你们有qq群吗怎么加入?
当然有的,如果你是帝国cms、易优cms、和pbootcms系统的爱好者你可以加入我们的QQ千人交流群http://www.yuanmababa.cn/page-qun.html。
  • 25会员数(个)
  • 744资源数(个)
  • 0本周更新(个)
  • 0 今日更新(个)
  • 1056稳定运行(天)

提供最优质的资源集合

加入VIP
开通VIP 享更多特权,建议使用 QQ 登录