摘要
dedecms的cn_substr_utf8字符串截取函数似乎有些问题,研究dedecms的朋友可以看看。
正文
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