一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

DEDECMS|帝國CMS|Discuz|PHPCMS|Wordpress|ZBLOG|ECSHOP|蘋果CMS|極致CMS|CMS系統|

服務器之家 - 建站程序 - DEDECMS - dedecms 的cn_substr_utf8字符串截取函數商榷

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

2019-07-26 10:14dedecms教程網 DEDECMS

在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 = '';</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;
}
}

 

其中

 

復制代碼
代碼如下:

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));</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) { $restr .= $c; } else if($i > $startdd)
{
$restr .= $c;
}</p> <p> if(ord($str[$i])>0x80)
{
if($str_len>$i+1)
{
$c = $str[$i].$str[$i+1];
}
$i++;
}
else
{
$c = $str[$i];
}</p> <p> if($i >= $enddd)
{
if(strlen($restr)+strlen($c)>$slen)
{
break;
}
else
{
$restr .= $c;
break;
}
}
}
return $restr;
}</p> <p>function cn_substr_utf8($str, $length, $start=0)
{
if(strlen($str) < $start+1)
{
return '';
}
preg_match_all("/./su", $str, $ar);</p> <p> $str = '';
$tstr = '';</p> <p> //為了兼容mysql4.1以下版本,與數據庫varchar一致,這里使用按字節截取
for($i=0; isset($ar[0][$i]); $i++)
{
if(strlen($tstr) < $start)
{</p> <p> $tstr .= $ar[0][$i];
}
else
{</p> <p> if(strlen($str) < $length + strlen($ar[0][$i]) )
{</p> <p> $str .= $ar[0][$i];
}
else
{</p> <p> break;
}
}
}
return $str;
}</p> <p>function cn_substr_utf82($str, $length, $start=0)
{
if(strlen($str) < $start+1)
{
return '';
}
preg_match_all("/./su", $str, $ar);</p> <p> $str = '';
$tstr = '';</p> <p> //為了兼容mysql4.1以下版本,與數據庫varchar一致,這里使用按字節截取
for($i=0; isset($ar[0][$i]); $i++)
{
if(strlen($tstr) < $start)
{</p> <p> $tstr .= $ar[0][$i];
}
else
{</p> <p> if(strlen($str) < $length + strlen($ar[0][$i]) -1 ) // phpsir 加了 -1 
{</p> <p> $str .= $ar[0][$i];
}
else
{</p> <p> break;
}
}
}
return $str;
}
 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本福利网| 欧美日韩一级视频 | 日韩在线观看网址 | 精品综合一区二区三区 | 98免费视频| 变态np虐高h | 国产美女做爰免费视频网址 | 男人晚上适合偷偷看的污污 | 奇米影视久久 | 美女扒开奶罩让男人吃奶 | 91精品综合国产在线观看 | 国产成人精品s8sp视频 | 丝袜捆绑调教丨vk | 五月色婷婷久久综合 | 大又大又黄又爽免费毛片 | 精品AV无码一二三区视频 | 手机看片国产免费现在观看 | 精品国产自在在线在线观看 | 国产精品第四页 | 久久免费看少妇高潮A片JA | 免费在线观看日本 | 免费在线公开视频 | 欧美在线观看网址 | 亚洲无人区乱码中文字幕 | 曹逼网站| 2022最新国产在线 | 调教开发新婚娇妻放荡 | 精品一区二区三区在线播放 | 免费一级特黄特色大片在线观看 | 青青热久免费精品视频精品 | 午夜精品免费 | 国产精品久久久久久五月尺 | 国产成人精品免费大全 | 久草在线草a免费线看 | 国产亚洲欧美一区二区三区 | 国产精品视频色拍拍 | 久久亚洲精品专区蓝色区 | 紧身短裙女教师波多野 | a在线观看欧美在线观看 | 国产日韩一区二区三区在线播放 | 99热这里有免费国产精品 |