DedeCMS织梦网站模板的cn_substr_utf8字符串截取涵数商议
在phpsir见到的本文,主要是说下dedecms 的cn_substr_utf8涵数仿佛有一些难题,科学研究dedecms的盆友能看下
在dedecms里边 cn_substr_utf8 涵数是那样的
编码以下:
<span style="font-size:14px;">/**
* 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 = '';
</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]) ) {
$str .= $ar[0][$i];
} else {
break;
}
}
}
return $str;
}
}</span>
在其中
编码以下:
<span style="font-size:14px;">if(strlen($str) < $length strlen($ar[0][$i]) )</span> |
一行很有可能会导致提取后多了一个字符,能够考虑到改成
编码以下:
<span style="font-size:14px;">if(strlen($str) < $length strlen($ar[0][$i]) -1 )</span> |
测试程序以下
编码以下:
<span style="font-size:14px;">$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));
</p> <p>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) {</span>
1.本站大部分内容均收集于网络!若内容若侵犯到您的权益,请发送邮件至:duhaomu@163.com,我们将第一时间处理!
2.资源所需价格并非资源售卖价格,是收集、整理、编辑详情以及本站运营的适当补贴,并且本站不提供任何免费技术支持。
3.所有资源仅限于参考和学习,版权归原作者所有,更多请阅读网站声明。