
phpsir看到的文章主要是关于DEDEECMS的cn_substr_utf8函数,好像是一些比较难的问题,科学研究DEDEECMS的盆友可以看看。
在dedecms中,cn_substr_utf8函数是这样的
复制代码编码如下:
/**
*utf-8中文拦截,单字节拦截方法
*
*@accesspublic
*@必须拦截的paramstring$str数组
*@paramint$slenlengthintercepted
*@paramint$startdd刚开始识别
*@returnfunction_exists('cn_substr_utf8'))
$start1)
{
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)<;$lengthstrlen($ar[0][$I])
{
$str。=$ar[0][$I];
}
else
{
break;
}
}
}
return$str;
}
}
在那里
复制代码如下:
if(strlen($str)<$lengthstrlen($ar[0][$I])
一行可能会在截取后导致一个额外的字符,可以将其更改为
复制代码如下:
if(strlen($str)<$lengthstrlen($ar[0][$I])-1)
测试程序如下
复制代码如下:
$f="Hellofasdfa,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>functioncn_substr($str,$slen,$startdd=0)
{
global$CFG_soft_lang;
if($CFG_soft_lang=='utf-8')
{
returncn_substr_utf8($str,$slen,$startdd);
}
$restr='';
$c=“”;
$str_len=strlen($str);
if($str_len<;$startdd1)
{
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;}elseif($I>;$startdd)
{
$restr。=$c;
}<;/p>;
<;p>if(ord($str[$I])>;0x80)
{
if($str_len>;$i1)
{
$c=$str[$i]。$str[$I1];
}
$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>functioncn_substr_utf8($str,$length,$start=0)
{
if(strlen($str)<;$start1)
{
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)<;$lengthstrlen($ar[0][$I])
{<;/p>;
<;p>$str。=$ar[0][$I];
}
else
{<;/p>;
<;p>打破;
}
}
}
return$str;
}<;/p>;
<;p>函数cn_substr_utf82($str,$length,$start=0)
{
if(strlen($str)<;$start1)
{
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)<;$lengthstrlen($ar[0][$I])-1)//PHPsiradded-1
{
else
{<;/p>; <;p>打破;
}
}
}
return$str;
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)