14.4 面向对象的应用——中文字符串的截取类
本节将实现理论与实践的结合,将面向对象技术应用到实际的程序开发中。
为了确保程序页面整洁美观,经常需要对输出的字符串进行截取。在截取英文字符串时,可以使用substr()函数来完成。但是当遇到中文字符串时,如果仍使用substr()函数,那么就有可能出现乱码的情况,因为一个汉字是由两个字节组成的,所以当截取的内容出现单数时,就有可能将一个汉字拆分,从而导致输出一个不完整的汉字,也就是乱码。
【例14.24】本例编写MsubStr类,定义csubstr方法,实现对中文字符串的截取,避免在截取中文字符串时出现乱码的问题。实例代码如下:(实例位置:光盘TMsl1424)
<?php class MsubStr{ function csubstr($str, $start, $len){ //$str指定字符串,$start指的是字符串的起始位置,$len指的是长度 $strlen=$start+$len; //$strlen字符串的总长度(从字符串的起始位置到字符串的总长度) $tmpstr=""; //初始化变量 for($i=0; $i<$strlen; $i++){ //通过for循环语句,循环读取字符串 if(ord(substr($str, $i,1))>0xa0){ //如果字符串中首个字节的ASCII序数值大于0xa0,则表示为汉字 $tmpstr.=substr($str, $i,2); //每次取出两位字符赋给变量$tmpstr,即等于一个汉字 $i++; //变量自加1 }else{ //如果不是汉字,则每次取出一位字符赋给变量$tmpstr $tmpstr .= substr ( $str, $i, 1 ); } } return$tmpstr; //输出字符串 } } $mc=new MsubStr(); //类的实例化 ?> <table width="204" height="195" border="0" cellpadding="0" cellspacing="0" background="images/bg.JPG"> <tr> <td><?php $string="关注明日科技,关注PHP从入门到精通改版!"; if(strlen($string)>10){ //判断字符串的长度 echo substr($string,0,12)."..."; //截取字符串中9个字符 }else{ echo $string; } ?> </td> </tr> <tr> <td> <?php $strs="关注明日科技,关注PHP从入门到精通改版!"; //定义字符串 if(strlen($string)>10){ //判断字符串长度 echo$mc->csubstr($strs, "0", "9")."..."; //应用类中的方法截取字符串 }else{ echo$strs; //输出字符串 } ?> </td> </tr> <tr> <td><?php $strs="关注PHP编程词典!"; if(strlen($string)>30){ echo $mc ->csubstr($strs, "0" , "20")."..."; }else{ echo $strs; } ?> </td> </tr> </table>
本例不但应用类中的方法对字符串进行了截取,而且还使用substr()函数对字符串进行了截取,与类中的方法进行对比,运行结果如图14.13所示。
图14.13 通过类中的方法截取中文字符串
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。