php中 ord() 和 chr() 处理 utf8 字符串

Posted 一菲聪天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php中 ord() 和 chr() 处理 utf8 字符串相关的知识,希望对你有一定的参考价值。


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 字符串的主要内容,如果未能解决你的问题,请参考以下文章

python中ord()函数和chr()函数用法

飘逸的python - ord和chr以及unichr

Python二级考试基础知识(ord,chr函数详解)

chr()ord()函数

python的内置函数ord()chr()str()

python chr()unichr()和ord()