因为把双字节截断的原因比如保留四个字符的话
“我们的爱”就没有问题
但是“a我们的爱”就会又问题
建议使用我写的函数:
function showShort($str, $len)
{
if (strlen($str) <= $len)return $str;
$s = 0;
$new_str = ""; //初始化状态变量和原始空字串
for($i = 0;$i < $len-2;$i++) {
if (ord($str{$i}) > 127)$s++;
$new_str .= $str{$i};
}
if ($s % 2 == 1)$new_str .= $str{$i};
return $new_str . "...";
} 经过自己的测试,到现在还没有发现BUG
“我们的爱”就没有问题
但是“a我们的爱”就会又问题
建议使用我写的函数:
function showShort($str, $len)
{
if (strlen($str) <= $len)return $str;
$s = 0;
$new_str = ""; //初始化状态变量和原始空字串
for($i = 0;$i < $len-2;$i++) {
if (ord($str{$i}) > 127)$s++;
$new_str .= $str{$i};
}
if ($s % 2 == 1)$new_str .= $str{$i};
return $new_str . "...";
} 经过自己的测试,到现在还没有发现BUG
***@Author:LAD
***@URL :<a href="http://www.cnpik.com/" target="_blank">http://www.cnpik.com/</a>
***@E_mail:[email protected]
***@随便用,不收钱 :-)
*/function cnSubStr($string,$sublen)
{
if($sublen>=strlen($string))
{
return $string;
}
$s="";
for($i=0;$i<$sublen;$i++)
{
if(ord($string{$i})>127)
{
$s.=$string{$i}.$string{++$i};
continue;
}else{
$s.=$string{$i};
continue;
}
}
return $s;
}// End Function cnSubStr($string,$sublen)/////////// Use like this :echo "<p>__________________________<p>";
$string="242432反对感是456犯得上广泛大使馆地方7890";
$sublen=strlen($string);
$len=20;
echo $string."<p>";
echo "总长为:".($sublen+1)."<p>";
echo "截取数:".$len."<p>";for($i=1;$i<=$sublen+1;$i++){
if($i>$len){
echo $i."<b> →</b> ".cnSubStr($string,$i)."…<br>";
continue;
}
echo $i."<b> →</b> ".cnSubStr($string,$i)."<br>";
}?>