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

以下几个函数用起来颇为顺手的。不过要知道,得在utf-8环境下使用。

header('Content-type:text/html;charset=utf-8');

/**

* 可以统计中文字符串长度的函数

* @param $str 要计算长度的字符串

* @param $type 计算长度类型,0(默认)表示一个中文算一个字符,1表示一个中文算两个字符

*

*/

function abslength($str)

{

if(empty($str)){

return 0;

}

if(function_exists('mb_strlen')){

return mb_strlen($str,'utf-8');

}

else {

preg_match_all("/./u", $str, $ar);

return count($ar[0]);

}

}

$str = '我们都是中国人啊,ye!';

$len = abslength($str);

var_dump($len); //return 12

$len = abslength($str,'1');

echo '
'.$len; //return 22

/*

utf-8编码下截取中文字符串,参数可以参照substr函数

@param $str 要进行截取的字符串

@param $start 要进行截取的开始位置,负数为反向截取

@param $end 要进行截取的长度

*/

function utf8_substr($str,$start=0) {

if(empty($str)){

return false;

}

if (function_exists('mb_substr')){

if(func_num_args() >= 3) {

$end = func_get_arg(2);

return mb_substr($str,$start,$end,'utf-8');

}

else {

mb_internal_encoding("UTF-8");

return mb_substr($str,$start);

}

}

else {

$null = "";

preg_match_all("/./u", $str, $ar);

if(func_num_args() >= 3) {

$end = func_get_arg(2);

return join($null, array_slice($ar[0],$start,$end));

}

else {

return join($null, array_slice($ar[0],$start));

}

}

}

$str2 = 'wo要截取zhongwen';

echo '
';

echo utf8_substr($str2,0,-4); //return wo要截取zhon

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

/*

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

*

* @param string $str 要截取的字串

* @param int $start 截取起始位置

* @param int $length 截取长度

* @param string $charset utf-8|gb2312|gbk|big5 编码

* @param $suffix 是否加尾缀

*/

public function csubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)

{

if(function_exists("mb_substr"))

{

if(mb_strlen($str, $charset) <= $length) return $str;

$slice = mb_substr($str, $start, $length, $charset);

}

else

{

$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";

$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";

$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";

$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";

preg_match_all($re[$charset], $str, $match);

if(count($match[0]) <= $length) return $str;

$slice = join("",array_slice($match[0], $start, $length));

}

if($suffix) return $slice."…";

return $slice;

}

php 中文字符串长度_php中计算中文字符串长度、截取中文字符串的函数代码相关推荐

  1. 写一个函数,2 个参数,1 个字符串,1 个字节数,返回截取的字符串,要求字符串中的中文不能出现乱码

    题目要求: 写一个函数,2 个参数,1 个字符串,1 个字节数,返回截取的字符串,要求字符串中的中文不能出现乱码. 如("我ABC",4)应该截为"我AB", ...

  2. java sessionid长度_php中session_id()函数详细介绍,会话id生成过程及session id长度

    php中session_id()函数原型及说明session_id()函数说明:stringsession_id([string$id])session_id() 可以用来获取/设置 当前会话 ID. ...

  3. php 获取array的长度_php中获取数组长度的方法

    php中获取数组长度的方法 php获取数组长度的方法,php为我们提供了两个函数可以计算一维数组长度,如count,sizeof都可以直接统计数组长度,还有获取二维数组的方法,在php中获取数组长度方 ...

  4. AutoCAD中计算线加总长度

    ;;;----------------------------------------------------- ;;;计算线加总长度 ;;;使用方法:命令行中输入:countl ;;;------- ...

  5. php mysql 时间差_PHP中计算时间差的方法

    PHP中计算时间差的方法 PHP中计算时间差的几种方法,在php中计算时间差有时候是件麻烦的事!不过只要你掌握了日期时间函数的用法那这些也就变的简单了,以下是小编为大家搜索整理的PHP中计算时间差的方 ...

  6. mysql 数值类型 长度_mysql中的数据类型的长度

    位,字节,字 --------------------------------------------------------------- 8位(bit)=1字节(Byte),1024字节=1KB: ...

  7. php怎么比较数组长度_PHP中如何获取数组的长度

    编程中数组的使用频率是非常高的,其它判断一个数据是否为空,我们通常都会判断数组的长度.这篇文章就说说在PHP编程语言中如果获取一个数组的长度. PHP count()函数 count():函数返回数组 ...

  8. php mysql防注入字符串过滤_php中防止SQL注入的方法

    最好对magic_quotes_gpc已经开放的情况下,还是对$_POST['lastname']进行检查一下. 再说下mysql_real_escape_string和mysql_escape_st ...

  9. java文件长度_Java中的音频文件长度

    我在解决基于它的字节的mp3文件中的数据时遇到问题. 输出的第一部分是正确的,我有一个长达254秒的mp3文件,我从Github的mp3解析库mp3agic获取它的信息. 但是,关于帧长度和持续时间的 ...

  10. php查找以xx结尾的的字符串单词,Javascript中查找不以XX字符结尾的单词示例代码_javascript技巧...

    首先,让我声明一下,我在写这篇文章之前花了2个多小时在弄正则表达式.悲~悲~悲~ 按照一般的思路,先来看看其他几个插找方式: 我以字符串 var str = "eattd gebcat ge ...

最新文章

  1. 1、使用库函数计算两个向量的夹角
  2. TCP/IP基础概念及通信过程举例
  3. 学python是什么专业-小白学python是自学好,还是专业老师培训好?
  4. 详解Struts2 Action名称的搜索顺序
  5. Python中MySQLdb的connect的用法
  6. 关于mount在unix系统上
  7. java 热补丁_Android热补丁之AndFix原理解析
  8. 海量数据拆分到nosql系统的一种方案
  9. Java IO: 其他字节流(上)
  10. java注册是什么意思_springcloud注册中心是什么意思?有什么作用?
  11. nessus安装_Nessus忘记密码怎么办?
  12. Linux系统管理(5)——使用yum快速搭建LAMP环境【方便快捷版】
  13. sql server 更新语句
  14. [原创]FOCUS处理系统流程之:大文本文件极速合并(sps文件合并)
  15. Android应用内存泄漏的定位、分析与解决策略
  16. python 线程锁_Python3多线程执行任务含线程同步锁
  17. 【CH01】创建、初始化SpringBoot项目与项目git管理
  18. 《Unity Shader入门精要》彩图版免费分享~~~~~
  19. 微信小程序中下载app的方法
  20. 普通云硬盘,高性能云硬盘和SSD云硬盘三者之间有什么区别?

热门文章

  1. linux vim常用快捷键
  2. 布隆过滤器实现原理及源码解析
  3. 光谷码农·每日新闻(2019-05-09)
  4. HDU多校练习第一场4608——I_Number
  5. IE6.0中getElementsByName和getElementById的bug
  6. 利用遗传算法求解旅行商问题
  7. Nissi商城序章(二):制定开发/设计规约
  8. datagrid编辑单元格中的内容
  9. java socket nio_Java Socket和ServerSocket编程 NIO
  10. MAC修改.bashrc/.bash_profile无效,默认的用户配置文件是.zshrc,