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)??<p>?//為了兼容mysql4.1以下版本,與數據庫varchar一致,這里使用按字節截取 for($i=0;?isset($ar[0][$i]);?$i++) { if(strlen($tstr)?</p><p>其中</p><p>代碼如下:</p><pre class="brush:php;toolbar:false">if(strlen($str)?<p>一行可能會造成截取后多了一個字符,可以考慮改為</p><p>代碼如下:<br></p><pre class="brush:php;toolbar:false">if(strlen($str)?<p>測試代碼如下</p><p>代碼如下:</p><pre class="brush:php;toolbar:false">$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>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) { $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)??</p><p>?$str?=?''; $tstr?=?'';</p>?<p>?//為了兼容mysql4.1以下版本,與數據庫varchar一致,這里使用按字節截取 for($i=0;?isset($ar[0][$i]);?$i++) { if(strlen($tstr)??</p><p>?$tstr?.=?$ar[0][$i]; } else {</p>?<p>?if(strlen($str)??</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)??</p><p>?$str?=?''; $tstr?=?'';</p>?<p>?//為了兼容mysql4.1以下版本,與數據庫varchar一致,這里使用按字節截取 for($i=0;?isset($ar[0][$i]);?$i++) { if(strlen($tstr)??</p><p>?$tstr?.=?$ar[0][$i]; } else {</p>?<p>?if(strlen($str)??</p><p>?$str?.=?$ar[0][$i]; } else {</p>?<p>?break; } } } return?$str; }</p>
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦