php 怎么达到js里的charCodeAt效果

php 怎么达到js里的charCodeAt效果

问题描述:

str = $('#txt_ssid7').val();
        var byteSize = 0;
        for (var i = 0; i < str.length; i++) {
            var charCode = str.charCodeAt(i);
            if (0 <= charCode && charCode <= 0x7f) {
                byteSize += 1;
            } else if (128 <= charCode && charCode <= 0x7ff) {
                byteSize += 2;
            } else if (2048 <= charCode && charCode <= 0xffff) {
                byteSize += 3;
            } else if (65536 < charCode && charCode <= 0x1FFFFF) {
                byteSize += 4;
            } else if (0x200000 < charCode && charCode <= 0x3FFFFFF) {
                byteSize += 5;
            } else if (0x4000000 < charCode && charCode <= 0x7FFFFFFF) {
                byteSize += 6;
            }
        }
                if (byteSize > 31) {

        }else {

        }

在tp5中要做一个后台验证,输入的字符不能大于31,老大说汉字三个字符,编码这块搞不懂,就网上找了个js写在前面,后台的找不到,php方法怎么写啊,研究好久研究不出来,帮帮我嘛。

下面是判断输入字符串的Unicode值

<?php
function uniord($str,$from_encoding=false){
        $from_encoding=$from_encoding ? $from_encoding : 'UTF-8';

        if(strlen($str)==1){ return ord($str);} 


        $str=mb_convert_encoding($str, 'UCS-4BE', $from_encoding);
        $tmp=unpack('N',$str);
        return $tmp[1];
}

$str="12345,上山打老虎";

$result=array();
for($i=0,$l=mb_strlen($str,'utf-8');$i<$l;++$i){
        $result[]=uniord(mb_substr($str,$i,1,'utf-8'));
}
echo join(",",$result);
?>

运行结果:49,50,51,52,53,44,19978,23665,25171,32769,34382

另外如果仅仅是判断字符串长度:
字符串不能大于31可以if(strlen($str) <= 31){}
汉字不超过三个字可以if(mb_strlen($str,'utf-8')<=3){}