但是在英文和汉字混合的情况下会出现如下问题:
如果有这样一个字符串 $str="这是一个字符串"; 为了截取该串的前10个字符,使用 if(strlen($str)>10) $str=substr($str,10)."…"; 那么,echo $str的输出应该是"这是一个字…"
假设 $str="这是1个字符串"; 这个串中包含了一个半角字符,同样执行: if(strlen($str)>10) $str=substr($str,10); 由于原字符串$str的第10、11个字符构成了汉字“符”; 执行串分割后会将该汉字一分为二,这样被截取的串就会发现乱码现象。
请问这种问题如何解决?即要使过长字符串实现分割,又不能让它发生乱码?
复制代码 代码如下: <?php //村里有很多,这个是gb2312 function substrs($content,$length='30') { if($length && strlen($content)>$length) { $num=0; for($i=0;$i<$length-3;$i++) { if(ord($content[$i])>127) { $num++; } } $num%2==1 ? $content=substr($content,0,$length-4):$content=substr($content,0,$length-3); } return $content; } ?>
复制代码 代码如下: function cutstr($string, $length, $dot = ' ...') { $strcut = ''; for($i = 0; $i < $length - strlen($dot) - 1; $i++) { $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i]; } return $strcut.$dot; }
复制代码 代码如下: function cutTitle($str, $len, $tail = ""){ $length = strlen($str); $lentail = strlen($tail); $result = ""; if($length > $len){ $len = $len - $lentail; for($i = 0;$i < $len;$i ++){ if(ord($str[$i]) < 127){ $result .= $str[$i]; }else{ $result .= $str[$i]; ++ $i; $result .= $str[$i]; } } $result = strlen($result) > $len ? substr($result, 0, -2) . $tail : $result . $tail; }else{ $result = $str; } return $result; }
以下是一些补充: 1. 截取GB2312中文字符串 代码如下:
复制代码 代码如下: (编辑:焦作站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|