当前位置:Gxlcms > PHP教程 > php中计算中文字符串长度和截取中文字符串的函数实例详解

php中计算中文字符串长度和截取中文字符串的函数实例详解

时间:2021-07-01 10:21:17 帮助过:7人阅读

在做PHP开发的时候,由于我国的语言环境问题,所以我们常常需要对中文进行处理。

在PHP中,我们都知道有专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数并非PHP的核心函数,所以,它们常常有可能没有开启。当然,如果是用的自己的服务器,则只要在php.ini中开启即可。如果是用的虚拟主机,而服务器又没有开启这方面的函数的话,那就需要我们自己写出点适合咱国情的函数来了。
以下几个函数用起来颇为顺手的。不过要知道,得在utf-8环境下使用。

代码如下:

  1. header('Content-type:text/html;charset=utf-8');
  2. /**
  3. * 可以统计中文
  4. 字符串
  5. 长度的函数
  6. * @param $str 要计算长度的字符串
  7. * @param $type 计算长度类型,0(默认)表示一个中文算一个字符,1表示一个中文算两个字符
  8. *
  9. */
  10. function abslength($str)
  11. {
  12. if(empty($str)){
  13. return 0;
  14. }
  15. if(function_exists('mb_strlen')){
  16. return mb_strlen($str,'utf-8');
  17. }
  18. else {
  19. preg_match_all("/./u", $str, $ar);
  20. return count($ar[0]);
  21. }
  22. }
  23. $str = '我们都是中国人啊,ye!';
  24. $len = abslength($str);
  25. var_dump($len); //return 12
  26. $len = abslength($str,'1');
  27. echo '<br />'.$len; //return 22
  28. /*
  29. utf-8编码下截取中文字符串,参数可以参照substr函数
  30. @param $str 要进行截取的字符串
  31. @param $start 要进行截取的开始位置,负数为反向截取
  32. @param $end 要进行截取的长度
  33. */
  34. function utf8_substr($str,$start=0) {
  35. if(empty($str)){
  36. return false;
  37. }
  38. if (function_exists('mb_substr')){
  39. if(func_num_args() >= 3) {
  40. $end = func_get_arg(2);
  41. return mb_substr($str,$start,$end,'utf-8');
  42. }
  43. else {
  44. mb_internal_encoding("UTF-8");
  45. return mb_substr($str,$start);
  46. }
  47. }
  48. else {
  49. $null = "";
  50. preg_match_all("/./u", $str, $ar);
  51. if(func_num_args() >= 3) {
  52. $end = func_get_arg(2);
  53. return join($null,
  54. array_slice
  55. ($ar[0],$start,$end));
  56. }
  57. else {
  58. return join($null, array_slice($ar[0],$start));
  59. }
  60. }
  61. }
  62. $str2 = 'wo要截取zhongwen';
  63. echo '<br />';
  64. echo utf8_substr($str2,0,-4); //return wo要截取zhon


支持gb2312,gbk,utf-8,big5 中文截取方法

代码如下:

  1. /*
  2. * 中文截取,支持gb2312,gbk,utf-8,big5
  3. *
  4. * @param string $str 要截取的字串
  5. * @param int $start 截取起始位置
  6. * @param int $length 截取长度
  7. * @param string $charset utf-8|gb2312|gbk|big5 编码
  8. * @param $suffix 是否加尾缀
  9. */
  10. public function csubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
  11. {
  12. if(function_exists("mb_substr"))
  13. {
  14. if(mb_strlen($str, $charset) <= $length) return $str;
  15. $slice = mb_substr($str, $start, $length, $charset);
  16. }
  17. else
  18. {
  19. $re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
  20. $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
  21. $re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
  22. $re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
  23. preg_match_all($re[$charset], $str, $match);
  24. if(count($match[0]) <= $length) return $str;
  25. $slice = join("",array_slice($match[0], $start, $length));
  26. }
  27. if($suffix) return $slice."…";
  28. return $slice;
  29. }

以上就是php中计算中文字符串长度和截取中文字符串的函数实例详解的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行