PHP计算字符串长度,包括计算英文、GBK、UTF-8多种字符集下PHP如何计算字符串长度。

英文字符串长度,strlen()是PHP自带的计算英文字符串的函数。

GBK字符串长度

中文字符计算为2个字符,英文字符计算为1个,可以统计中文字符串长度的函数。

function abslength($str)
{
$len = strlen($str);
$i = 0;
while ($i < $len)
{
if (preg_match("/^[" . chr(0xa1) . "-" . chr(0xff) . "]+$/", $str[$i]))
{
$i += 2;
}
else
{
$i += 1;
}
} return $i;
}

UTF8字符串长度

下面定义的strlen_utf8函数可以统计UTF-8字符串的长度,但不同的是,该函数并不考虑字节,这有些类似 Javascript 中字符串的length方法,一个字符全部按 1 个长度计算。

<?php
/**
* 计算 UTF-8 字符串长度(忽略字节的方案)
*
* @param string $str
* @return int
*/
function strlen_utf8($str)
{
$i = 0;
$count = 0;
$len = strlen($str);
while ($i < $len)
{
$chr = ord($str[$i]);
$count++;
$i++;
if ($i >= $len)
{
break;
}
if ($chr & 0x80)
{
$chr <<= 1;
while ($chr & 0x80)
{
$i++;
$chr <<= 1;
}
}
} return $count;
} $str = "http://52php.cnblogs.com - PHP博客";
echo strlen_utf8($str);
?>

PHP如何计算短信的长度/字数?

项目中,用到发短信功能,但是每条短信如果字数超过,会作为一条新的短信发送,所以在记录发送短信日志时,需要计算下文字个数!

英文、中文统一为一个字来计算,上面的 strlen_utf8($str) 正好可以解决这个问题。

PHP计算字符串长度,PHP如何计算短信的长度/字数?的更多相关文章

  1. Linux-C实现GPRS模块发送短信

    “GSM模块,是将GSM射频芯片.基带处理芯片.存储器.功放器件等集成在一块线路板上,具有独立的操作系统.GSM射频处理.基带处理并提供标准接口的功能模块.GSM模块根据其提供的数据传输速率又可以分为 ...

  2. 在Linux下用C语言实现短信收发

     本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lyserver/archive/2008/10/01/3007090.aspx 首先,我根据功能需要创建了几个头文件 ...

  3. wavecom短信猫常用AT命令

    wavecom短信猫常用AT命令 一.一般命令 1. AT+CGMI 给出模块厂商的标识. 2. AT+CGMM 获得模块标识.这个命令用来得到支持的频带 (GSM 900,DCS 1800 或PCS ...

  4. Android开发手记(15) 拨打电话和收发短信

    1.Intent简介 Android组价之间的通信,由Intent来协助完成.Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到 ...

  5. Android系统应用Mms之Sms短信发送流程(Mms应用部分)二

    1. 新建一条短信, 在发送短信之前, 首先创建的是一个会话Conversation, 以后所有与该接收人(一个或多个接收人)的消息交互, 都在该会话Conversation中. ComposeMes ...

  6. Java实现短信中提取号码

    Description 提取一条短信里所有的电话号码,电话号码之间换行打印,短信的内容由用户输入. Input 第一行有个整数n(1≤n≤1000)表示测试用例的个数.其后的每一行中有一条短信,每一条 ...

  7. 使用python实现短信PDU编码

    前几天入手一个3G模块,便倒腾了一下.需要发送中英文混合短信,所以采用PDU模式(不了解google ^_^). 最大问题当然就是拼接PDU编码(python这么强大,说不定有模块),果不其然找到一个 ...

  8. android: 接收和发送短信

    8.2    接收和发送短信 收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这 项功能,而 Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持.每个 A ...

  9. [android] 短信发送器

    /*****************2016年4月23日 更新********************************/ 知乎:什么是 7 位元的字符? 英文字符难道不是 8 bit 是一个字 ...

随机推荐

  1. html中offsetTop、clientTop、scrollTop、offsetTop各属性介绍(转载)

    HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth scrollHeight: 获取对象的滚动高度. scrollLeft: 设置或获取位于 ...

  2. 知问前端——日历UI(二)

    datapicker外观选项 属性 默认值/类型 说明 disabled false/布尔值 禁用日历 numberOfMonths 1/数值 日历中同时显示的月份个数.默认为1,如果设置3就同时显示 ...

  3. KVM的ept机制

    转载:http://ytliu.info/blog/2014/11/24/shi-shang-zui-xiang-xi-de-kvm-mmu-pagejie-gou-he-yong-fa-jie-xi ...

  4. gcc升级方法

    https://www.cppfans.org/1719.html 默认链接到 /usr/local/bin/gcc,需要链接一下,替换默认的低版本 ln -s /usr/local/bin/gcc ...

  5. xpath用法(持续更新ing)

    article:选取所有article元素的所有子节点 /article:选取根元素article article/a:选取所有属于article的子元素的a元素 //div:选取所有div元素 ar ...

  6. V-Hyper安装ubuntu-13.10-server-amd64

    1.在windws8上的V_Hyper虚拟机上安装Ubuntu虚拟机服务器版.遇到的问题和解决方案 2.正确的在V-Hyper配置方法参考文章:在Hyper-V中安装和配置Ubuntu Server ...

  7. 【 浅谈Linux路由机制 】

    以下均为个人实验验证结果,如有问题,恳请指正. 现在服务器一般都有四张网卡,给了我们更多网络模型的选择.为了业务的需求,有时我们需要如下网络架构 系统:centos 7.2 x64 两张网卡不在同一个 ...

  8. js面向对象编程(一):封装(转载)

    一. 生成对象的原始模式 假定我们把猫看成一个对象,它有"名字"和"颜色"两个属性. var Cat = { name : '', color : '' } 现 ...

  9. eps图片中有中文乱码的问题

    一般的,如果matlab中的fig图片中有中文,直接saveas为eps,eps再插入latex后会出现乱码. 解决的办法为: (1) *.fig利用‘file--print’保存为*.pdf (2) ...

  10. (八)for语句

    (1)语法 (2)批量ping主机 这里有个重点就是把每次ping主机的动作放到后台运行 #!/bin/bash >ip.txt for i in {1..254} do ip=192.168. ...