分类: PHP2014-11-26 12:11 1033人阅读 评论(0) 收藏 举报

函数是这样定义的:

int ord ( string$string)

返回字符串 string 第一个字符的 ASCII 码值。

该函数是chr()的互补函数。

试一下:

echo ord('我');
这里只能返回230, 我是以u8保存的文件并输出的, 它得到的只有230, 而230转换成hex是e6,实际上utf-8中我的编码是e68891, 它只拿到了第一个字节
echo chr(0xe6).chr(0x88).chr(0x91);

这个例子可以在utf-8的情况下输出”我“这个汉字

如果大家想了解字符编码的问题可以点这里字符编码

如果大家想查看一个汉字的gbk,utf-8,unicode各种编码方式推荐大家用Notepad++下的HEX-editor点击这里下载:

http://pan.baidu.com/s/1hquyJwo

长这样子


提高逼格:

身为一个程序猿,除了是苦逼的代名词外,还是神秘的象征,偶尔装XX还是不错的。既然说到编码,

那我们就说说属于你的字吧,在utf-8编码的世界里,可不是每个人都能找到属于自己的那款哦,

‘我’的编码是三字节,分别为e6、88、91,如果把你的生日放进去能编出啥字呢,想想是不是还有点小激动,

例如你是1988-9-4出生,那对应的属于自己的三字节为e9、88、94,anyway这个规则你也可以自己定义,

爆个料,按照此方法,我的字是‘釉’,好字啊,you you 切克闹。

按照此法为啥不是每个人都有呢,那自己读下utf-8的二进制存储规则就知道了,

哈哈,还是点这里字符编码

扯了一堆没用的,其实就是希望大家发现编码的乐趣

 

自己动手:

很久以前是没有mb_substr函数的,因此带汉字的字符串截断操作处理起来很麻烦,不过现在可以直接用它。

既然我们对字符编码和ord函数有了很好的了解,自己就写个针对utf-8编码的字符串截断的函数吧。

代码很戳,有待优化,但理解起来简单,贴过去可以运行,基本场景也考虑到了,还算欣慰;

  1. <?php
  2. $a = "jf我们de没";
  3. /**
  4. * @brief
  5. *
  6. * @param $str 待截取的字符串
  7. * @param $start 字符串开始位置
  8. * @param $num  截取到多长的字符串
  9. *
  10. * @return
  11. */
  12. function utf8_substr($str, $start, $num){
  13. $res = '';      //存储截取到的字符串
  14. $cnt = 0;       //计数器,用来判断字符串是否走到$start位置
  15. $t = 0;         //计数器,用来判断字符串已经截取了$num的数量
  16. for($i = 0; $i < strlen($str); $i++){
  17. if(ord($str[$i]) > 127){    //非ascii码时
  18. if($cnt >= $start){     //如果计数器走到了$start的位置
  19. $res .=$str[$i].$str[++$i].$str[++$i]; //utf-8是三字节编码,$i指针连走三下,把字符存起来
  20. $t ++;              //计数器++,表示我存了几个字符串了到$num的数量就退出了
  21. }else{
  22. $i++;               //如果没走到$start的位置,那就只走$i指针,字符不用处理
  23. $i++;
  24. }
  25. $cnt ++;
  26. }else{
  27. if($cnt >= $start){     //acsii码正常处理就好
  28. $res .=$str[$i];
  29. $t++;
  30. }
  31. $cnt ++;
  32. }
  33. if($num == $t) break;       //ok,我要截取的数量已经够了,我不贪婪,我退出了
  34. }
  35. return $res;
  36. }
  37. var_dump(utf8_substr($a, 3, 10));   //结果应该是你想要的
  38. ?>

版权声明:本文为博主原创文章,未经博主允许不得转载。

php的ord函数——解决中文字符截断问题的更多相关文章

  1. 解决IAR printf函数输出中文字符乱码问题

    首先看一下IAR的中文字符的坑 这会对调试造成很大的干扰,因为眼见不一定为实. 你所期望的中文打印输出都成了乱码,心在滴血.... 解决方法详细,纯属个人摸索 1.新建notepad++文件,编码方式 ...

  2. Python中的解决中文字符编码的问题

    python3中str默认为Unicode的编码格式 python2中str默认为bytes类型的编码格式 Unicode是一32位编码格式,不适合用来传输和存储,所以必须转换成utf-8,gbk等等 ...

  3. Python解决中文字符的问题

    from __future__ import unicode_literals print(type("test")) #<type 'unicode'> Chinat ...

  4. Servlet & JSP - 中文字符问题

    Servlet 中的中文字符 来自 URL 参数部分的中文字符 Tomcat 默认接收数据的编码是 ISO-8859-1.所以当请求 URL 的参数部分含有中文字符,需要转换字符的编码. Enumer ...

  5. php输出中文字符

    中文字符不可以使用imagettftext()函数在图片中直接输出,如果要输出中文字符,需要先使用iconv()函数对中文字符进行编码,语法格式如下:string iconv ( string $in ...

  6. 判断一个python字符串中是否包含中文字符

    #在python中一个汉字算一个字符,一个英文字母算一个字符 #用 ord() 函数判断单个字符的unicode编码是否大于255即可. def is_contain_chinese(check_st ...

  7. PHP用mb_string函数库处理与windows相关中文字符

    昨天想批处理以前下载的一堆文件,把文件里的关键内容用正则匹配出来,集中处理.在操作文件时遇到一个问题,就是windows操作系统中的编码问题. 我们都知道windows中(当然是中文版),文件名和文件 ...

  8. 解决osg路径与文件名中的中文字符问题

    转至:http://blog.csdn.net/zhuqinglu/article/details/2064013 在打开或者保存一个osg模型的时候,经常遇到中文路径或者中文文件名的问题,此时会提示 ...

  9. php中url传递中文字符,特殊危险字符的解决方法

    php中的urldecode,base64_encode函数然后再结合自己写的替换函数来进行安全传递url中文字符,特殊危险字符. 需要在url中传递中文字符或是其它的html等特殊字符,似乎总会有各 ...

随机推荐

  1. asp中将系统货币符号¥改为美国货币符号$的做法

    我们一般用FormatCurrency()函数得到字符串前面都会加上人民币符号¥.但在做一些网站时想把他们变成$. 可以在网面的前面加上一名话就OK了 SetLocale("en-us&qu ...

  2. 第一章 consul简介

    1.consul的作用 服务发现 Consul clients提供服务(例如API) 其他的client发现服务的提供者(通过DNS或http,应用可以轻松的发现他们所依赖的服务) 健康检查 Key- ...

  3. 如何高效的将excel导入sqlserver?

    大部分人都知道用oledb来读取数据到dataset,但是读取之后怎么处理dataset就千奇百怪了.很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,System.Data.SqlClie ...

  4. iis服务器站点配置

    iis网站正常移动到一个新的服务器上 需要配置如下: 启用父路径 不启用父路径会报服务器500错误

  5. 【Python】Python Mako模板使用

    参考资料: Mako Templates for Python官网:http://www.makotemplates.org/ Python模板库Mako的用法:http://my.oschina.n ...

  6. RS请求错误之RSV-BBP-0028

    环境:Version  Cognos10.2 单机 非集群 运行报表的时候经常遇到: 错误信息为: The secondary request failed. The requested sessio ...

  7. 使用apache-cxf-2.2.10来制作一个极简版WebService程序

    原想拿最新版cxf来制作的,无奈Apache的zip包总下不下来,国内的apache-cxf-2.2.10却一蹴而就,也就用了这个版本.下载地址是:http://pan.baidu.com/s/1td ...

  8. 安装 ibm-java-x86_64-sdk-6.0-9.3.x86_64.rpm 的三步骤

    yum install libstdc++-devel.x86_64 yum install compat-libstdc++-33.x86_64 rpm -ivh ibm-java-x86_64-s ...

  9. jQuery框架开发一个最简单的幻灯效果

    在线演示 在这个课程中,我们将介绍如何使用jQuery来开发一个最简单的图片幻灯效果. 立刻观看互动课程:jQuery框架开发一个最简单的幻灯效果 阅读原文:jQuery框架开发一个最简单的幻灯效果

  10. 如何使用飞秋FeiQ实现两电脑通信(或传输文件)

    如何使用飞秋FeiQ实现两电脑通信(或传输文件) 1. 在两天电脑上,分别按照飞秋FeiQ 我使用的绿色飞秋2013正式版 2. 使用一根网线,将两电脑的网口连接一起 3. 设置飞秋FeiQ的端口号不 ...