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>


评论(0条)

刀客源码 游客评论