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){}