主题:substr
下雨了
[专家分:770] 发布于 2007-03-06 20:38:00
PHP中用 substr 函数对一个中含有中文的字符串变量取子串时通常会使得到的子字符串的末尾显示成问号 '? ',这是不是取成半个汉字造成的啊?要怎么解决?
回复列表 (共2个回复)
沙发
一个人住 [专家分:3290] 发布于 2007-03-07 21:53:00
这个问题,刚试验过,真的是因为取汉字不正确而造成的~~~~
而且不止后面会带有“?”,甚至会输出错语的汉字!
只要开始位置跟长度正确就不会有这个问题!
板凳
longlong16 [专家分:10670] 发布于 2007-03-13 17:01:00
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截取的长度
我来回复