ord()  : 将字符转为 ascii 码 (0-256),准确定义官方文档:http://php.net/manual/en/function.ord.php

chr() : 将 ascii 码转为字符,与 ord() 相反

不过这两个方法都有限制,只能处理 ascii 码,

如果需要处理的字符串包含 utf-8 ,就不能正常工作,假如 你使用的 php 是大于 7.2.0 版本,那么你可以使用增强的方法:

mb_ord()

mb_chr()

如果使用的 php 版本小于 7.2.0,可以尝试使用以下方法:

ord_utf8()

  function ord_utf8($string, &$offset) {
$code = ord(substr($string, $offset,1));
if ($code >= 128) { //otherwise 0xxxxxxx
if ($code < 224) $bytes_number = 2; //110xxxxx
else if ($code < 240) $bytes_number = 3; //1110xxxx
else if ($code < 248) $bytes_number = 4; //11110xxx
$code_temp = $code - 192 - ($bytes_number > 2 ? 32 : 0) - ($bytes_number > 3 ? 16 : 0);
for ($i = 2; $i <= $bytes_number; $i++) {
$offset ++;
$code2 = ord(substr($string, $offset, 1)) - 128; //10xxxxxx
$code_temp = $code_temp*64 + $code2;
}
$code = $code_temp;
}
$offset += 1;
if ($offset >= strlen($string)) $offset = -1;
return $code;
}

用法:

<?php
$text = "abcàê߀abc"; $offset = 0; //$offset is a reference, as it is not easy to split a utf-8 char-by-char. Useful to iterate on a string: while ($offset >= 0) {
echo $offset.": ".ordutf8($text, $offset)."\n";
} //-----------------------------------------
/* returns:
0: 97
1: 98
2: 99
3: 224
5: 234
7: 223
9: 8364
12: 97
13: 98
14: 99
*/
?>

chr_utf8()

     function chr_utf8 ($codes) {
if (is_scalar($codes)) $codes= func_get_args();
$str= '';
foreach ($codes as $code) $str.= html_entity_decode('&#'.$code.';',ENT_NOQUOTES,'UTF-8');
return $str;
}

用法和 chr() 一样;

参考:http://php.net/manual/en/function.ord.php
           http://php.net/manual/en/function.chr.php

ps: 这两个方法都是本人查看官方文档时,翻阅页面底部的 用户贡献 所看到的,建议平时查看官方文档时多留意底部的 用户贡献
 

php中 ord() 和 chr() 处理 utf8 字符串的更多相关文章

  1. python中ord()函数,chr()函数,unichr()函数

    ord()函数,chr()函数,unichr()函数 chr()函数用一个范围在range(256)内的(就是0-255)整数作参数,返回一个对应的字符.unichr()跟它一样,只不过返回的是Uni ...

  2. python 中的 用chr()数值转化为字符串,字符转化为数值ord(s)函数

    1.1 python字符串定义 #!/usr/bin/python # -*- coding: utf8 -*- # 定义一个字符串 s1 = 'this is long String that sp ...

  3. ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案

    好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...

  4. 内置函数-max、min、round、sorted、ord、chr、any、all、dir、eval、exec、map、filter、reduce

    http://www.nnzhp.cn/archives/152 1.max,min,round print(max([3,4.563,3,6,2.5])) #取最大值,可循环参数即可,int类型的, ...

  5. php中隐形字符65279(utf-8的BOM头)问题和fwrite写入文件bom头导致的乱码问题解决

     php中隐形字符65279(utf-8的BOM头)问题 今天在CSDN看到一个php输出空白隐形字符65279的问题,在网上找了下,发下这个65279字符是php用来标记文件是utf-8编码的,输出 ...

  6. UTF-8编码的字符串拆分成单字、获取UTF-8字符串的字符个数的代码及原理

    一.字符编码简介 1. ASCII码 在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(by ...

  7. [C++] zlatlcv: ATL字符串转换辅助库。能很方便的将UTF-8字符串转为TCHAR等字符串

    作者:zyl910 如今,UTF-8字符串的使用频率越来越多了.但是在VC中,不能直接处理UTF-8字符串,得专门去写UTF-8与窄字符串.宽字符串.TCHAR字符串相互转换的代码.不仅费时费力,而且 ...

  8. php中序列化与反序列化在utf8和gbk编码中测试

    在php中如果我们统一编码是没有什么问题了,但是很多朋友会发现一个问题就是utf8和gbk编码中返回的值会有所区别: php 在utf8和gbk编码下使用serialize和unserialize互相 ...

  9. java中的数据类型,运算符,字符串,输入输出,控制流,大数值,数组; 《java核心技术卷i》 第三章:java基本程序结构;

    <java核心技术卷i> 第三章:java基本程序结构: 每次看书,去总结的时候,总会发现一些新的东西,这次对于java的数组有了更深的了解: java中的数据类型,运算符,字符串,输入输 ...

随机推荐

  1. zabbix简介与部署

    zabbix介绍 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管 ...

  2. android studio 将自己的项目生成jar包

    很多情况下我们开发的项目不是一个完整的app,而是完成一部分功能,供别人的app使用的情况.这时就需要将我们的项目打包生成jar或者arr库文件,让别人的app导入我们的jar包,就能直接使用我们项目 ...

  3. Innodb IO优化-配置优化

    作者:吴炳锡 来源:http://www.mysqlsupport.cn/ 联系方式: wubingxi#gmail.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究. 对于数据库来讲 ...

  4. vue报错TypeError: Cannot read property '$createElement' of undefined

    报错截图: 这个错误就是路由上的component写成了components

  5. 获取input标签中file的内容

    1.直接获取文件中的内容: <form id="form" method="post" enctype="multipart/form-data ...

  6. C++基础笔记(int转string)

    int a = 23; stringstream ss; ss << a; string s1 = ss.str(); 头文件需添加#include "sstream"

  7. MyBatis 源码分析 - 插件机制

    1.简介 一般情况下,开源框架都会提供插件或其他形式的拓展点,供开发者自行拓展.这样的好处是显而易见的,一是增加了框架的灵活性.二是开发者可以结合实际需求,对框架进行拓展,使其能够更好的工作.以 My ...

  8. 从navicat中导入sql文件过大:Got a packet bigger than 'max_allowed_packet' bytes

    失败背景:刚才通过navicat向本地mysql数据库中导入sql文件.第一个sql文件(多个表)大小为967M,导入成功: 第二个sql(单个表)大小为50.1M,导入失败. 1.在navicat中 ...

  9. 833. Find And Replace in String

    To some string S, we will perform some replacement operations that replace groups of letters with ne ...

  10. pycharm中新建external tools

    1.Settings-Tools-External Tools 点击+号 2.Tools settings中的设置如下: Program: $PyInterpreterDirectory$/pytho ...