回 帖 发 新 帖 刷新版面

主题:substr

PHP中用 substr 函数对一个中含有中文的字符串变量取子串时通常会使得到的子字符串的末尾显示成问号 '? ',这是不是取成半个汉字造成的啊?要怎么解决?

回复列表 (共2个回复)

沙发

这个问题,刚试验过,真的是因为取汉字不正确而造成的~~~~
而且不止后面会带有“?”,甚至会输出错语的汉字!
只要开始位置跟长度正确就不会有这个问题!

板凳

function   csubstr($str,$start,$len)
{   
$strlen=strlen($str);   
$clen=0;   
for($i=0;$i<$strlen;$i++,$clen++)   
{   
if   ($clen>=$start+$len)   
break;   
if(ord(substr($str,$i,1))>0xa0)   
{   
if   ($clen>=$start)   
$tmpstr.=substr($str,$i,2);   
$i++;   
}   
else   
{   
if   ($clen>=$start)   
$tmpstr.=substr($str,$i,1);   
}   
}   
return   $tmpstr;   
}   
function   showshort($str,$len)   //截取
{   
$tempstr   =   csubstr($str,0,$len);   
if   ($str<>$tempstr)   
$tempstr   .=   "...";   //要什么结尾这里可以修改
return   $tempstr;   
}
用法:$memo   =   showshort($field,$length);//$field   要截取的内容,$length截取的长度 

我来回复

您尚未登录,请登录后再回复。点此登录或注册