### [dedecms字符串截取函数怎么用](https://www.prosaas.cn/article/1215) **Published:** 2020-01-11T02:03:08 **Author:** 5201314 **Excerpt:** dedecms字符串截取函数怎么用?dedecms 的cn_substr_utf8字符串截取函数商榷推荐学习:… ![](//zhiqipro.oss-cn-beijing.aliyuncs.com/2023/12/20231212115546262.jpg) **dedecms字符串截取函数怎么用?** dedecms 的cn\_substr\_utf8字符串截取函数商榷 推荐学习:织梦cms 在phpsir看到的这篇文章,主要是说下dedecms 的cn\_substr\_utf8函数好像有些问题,研究dedecms的朋友可以看下 在dedecms里面 cn\_substr\_utf8 函数是这样的 代码如下: /\*\* \* utf-8中文截取,单字节截取模式 \* \* @access public \* @param string $str 需要截取的字符串 \* @param int $slen 截取的长度 \* @param int $startdd 开始标记处 \* @return string \*/ if ( ! function\_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 = '';

//为了兼容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\]) ) { $str .= $ar\[0\]\[$i\]; } else { break; } } } return $str; } } 其中 代码如下: if(strlen($str) < $length + strlen($ar\[0\]\[$i\]) ) 一行可能会造成截取后多了一个字符,可以考虑改为 代码如下: if(strlen($str) < $length + strlen($ar\[0\]\[$i\]) -1 ) 测试代码如下 代码如下: $f = "你好fasdfa你fasdf#e#"; $pos = strpos($f,'#e#'); var\_dump($pos); var\_dump(cn\_substr\_utf8($f,$pos)); var\_dump(cn\_substr\_utf82($f,$pos));

function cn\_substr($str, $slen, $startdd=0) { global $cfg\_soft\_lang; if($cfg\_soft\_lang=='utf-8') { return cn\_substr\_utf8($str, $slen, $startdd); } $restr = ''; $c = ''; $str\_len = strlen($str); if($str\_len < $startdd+1) { return ''; } if($str\_len < $startdd + $slen || $slen==0) { $slen = $str\_len - $startdd; } $enddd = $startdd + $slen - 1; for($i=0;$i<$str\_len;$i++) { if($startdd==0) { $restr .= $c; } else if($i > $startdd) { $restr .= $c; }

if(ord($str\[$i\])>0x80) { if($str\_len>$i+1) { $c = $str\[$i\].$str\[$i+1\]; } $i++; } else { $c = $str\[$i\]; }

if($i >= $enddd) { if(strlen($restr)+strlen($c)>$slen) { break; } else { $restr .= $c; break; } } } return $restr; }

function cn\_substr\_utf8($str, $length, $start=0) { if(strlen($str) < $start+1) { return ''; } preg\_match\_all("/./su", $str, $ar);

$str = ''; $tstr = '';

//为了兼容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\]) ) {

$str .= $ar\[0\]\[$i\]; } else {

break; } } } return $str; }

function cn\_substr\_utf82($str, $length, $start=0) { if(strlen($str) < $start+1) { return ''; } preg\_match\_all("/./su", $str, $ar);

$str = ''; $tstr = '';

//为了兼容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\]) -1 ) // phpsir 加了 -1 {

$str .= $ar\[0\]\[$i\]; } else {

break; } } } return $str; } 以上就是dedecms字符串截取函数怎么用的详细内容,更多请关注知企PROSAAS其它相关文章! **Categories:** DEDECMS ---