在每种语言中,都会遇到汉字的截取,原因英文字母占一个字节,汉字占2个字节,一般的函数中都是对单个字节的,就是说按照英文截取的,当遇到汉字时可能截取一半,就会出现乱码。下面是php的解决方案,其他语言类似。
function msubstr($str, $start, $len){
$tmpstr = "";
$strlen = $start + $len;
for($i = 0; $i < $strlen; $i++){
if(ord(substr($str, $i, 1)) > 0xa0){
$tmpstr .= substr($str, $i, 2);
$i++;
}else
$tmpstr .= substr($str, $i, 1);
}
return $tmpstr;
}
在smarty模板中,经常用到汉字的截取,需要修改truncate函数或是自己增加函数,下面的代码是增加的函数:
function smarty_modifier_cntruncate($string, $strlen = 20, $etc = '...', $keep_first_style = false)
{
$strlen = $strlen*2;
$string = trim($string);
if ( strlen($string) <= $strlen ) {
return $string;
}
$str = strip_tags($string);
$j = 0;
for($i=0;$i<$strlen;$i++) {
if(ord(substr($str,$i,1))>0xa0) $j++;
}
if($j%2!=0) $strlen++;
$rstr=substr($str,0,$strlen);
if (strlen($str)>$strlen) {$rstr .= $etc;}
if ( $keep_first_style == true && ereg('^<(.*)>$',$string) ) {
if ( strlen($str) <= $strlen ) {
return $string;
}
$start_pos = strpos($string,substr($str,0,4));
$end_pos = strpos($string,substr($str,-4));
$end_pos = $end_pos+4;
$rstr = substr($string,0,$start_pos) . $rstr . substr($string,$end_pos,strlen($string));
}
return $rstr;
}
用法说明:<{$kjswsList[kjswsCount].topic|cntruncate:18:"...":true}>
18为汉字的个数,不是字节数。
分享到:
相关推荐
PHP 去HTML,截取指定汉字正则表达试PHP 去HTML,截取指定汉字正则表达试PHP 去HTML,截取指定汉字正则表达试PHP 去HTML,截取指定汉字正则表达试PHP 去HTML,截取指定汉字正则表达试PHP 去HTML,截取指定汉字正则表达试...
非常有用的php截取汉字类,简单易用是他的最大优点,即使新手也一看就会用的好东西,下载即可运行赶紧下载吧!
PHP中如何截取中文字符串
php 用substr截取中文时出现乱码 ,解决办法无需重写方法,只需改变一个数字即可解决中文乱码
php 截取包含中文的字符串
解决方法是根据值是否大于等于128来判断是否是双字节字符,以避免出现乱码的情况。但中英文混合、特殊符号等问题总是存在,现在写一个比较全面的。
php中截取汉字长度的方法有很多,本例通过自定义函数来完成这个需求,感兴趣的朋友可以参考下
但字符串只要出现中文字符,就有可能导致PHP substr中文乱码,因为中文UTF-8编码,每个汉字占3字节,而GB2312占2字节,英文占1字节,截取位数不准确,substr()硬生生地将一个中文字符“锯”成两半,造成断开的字符会...
本文实例总结了php中文字符串截取方法,非常实用的技巧。分享给大家供大家参考。具体方法分析如下: 用PHP函数substr截取中文字符可能会出现乱码,主要是substr可能硬生生的将一个中文字符“锯”成两半。 解决办法...
php截取中文字符串出现乱码,这是最近发现的事情,先前我曾经写过一篇关于自动生成meta信息的文章,那篇关于利用php截取文章前多少字作为description方法,但是出现了IE6无法加载CSS的现象,这里做一个补充。...
//字符截取,解决中文的截取问题
此文件包含了用PHP写的获取真实IP 和中文截取函数,有需要的可以看看,大家相互交流了^_^
介绍了php字符串截取中文的截取方法,涉及php字符串遍历、计算、判断等相关操作技巧,需要的朋友可以参考一下
GBK编码截取示例 复制代码 代码如下:$str = ‘我是谁’;...中英混合也完全没有问题。 友情提示 使用的时候要注意php文件的编码,和网页显示时的编码。 使用这个mb_substr方法要事先知道字符串的编码,如果不知
php //截取中文字符串 function mysubstr($str, $start, $len) { $tmpstr = “”; $strlen = $start + $len; for($i = 0; $i < $strlen; $i++) { if(ord(substr($str, $i, 1)) > 0xa0) { $tmpstr .= substr
本文主要介绍了php自定义截取中文字符串的方法,具有很好的参考价值,下面跟着小编一起来看下吧
利用mb_substr截取字符串不会出现乱码问题,高手可以飞过......
php中的一个中文字符串截取函数