Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP从符号到十六进制_Php - Fatal编程技术网

PHP从符号到十六进制

PHP从符号到十六进制,php,Php,我有一个汉字集作为变量,字符编码为utf-8: $a='列'; 由此,如何获得分配给字符串($b)的值“5217”(可能使用UTF-16?但可能有更好的方法) 代码: 函数unicode\u解码($str){ 返回preg_replace_callback(“/((?:[^\x09\x0A\x0D\x20-\x7E]{3})+/”,“decode_callback”,$str); } 函数decode_回调($matches){ $char=mb_convert_编码($matches[1],

我有一个汉字集作为变量,字符编码为utf-8:

$a='列';
由此,如何获得分配给字符串(
$b
)的值“5217”(可能使用UTF-16?但可能有更好的方法)

代码:

函数unicode\u解码($str){
返回preg_replace_callback(“/((?:[^\x09\x0A\x0D\x20-\x7E]{3})+/”,“decode_callback”,$str);
}
函数decode_回调($matches){
$char=mb_convert_编码($matches[1],“UTF-16”,“UTF-8”);
$”;
对于($i=0,$l=strlen($char);$i<$l;$i+=2){
$escaped.=“\u”.sprintf(“%02x%02x”,ord($char[$i]),ord($char[$i+1]);
}
返回逃逸美元;
}
一美元列';
变量转储(unicode解码($a));

您可以简单地解析UTF-8:

function utf8ord($c) {
  $ord0 = ord($c{0});
  if ($ord0 < 0x80) return $ord0;
  if ($ord0 < 0xe0) return ($ord0 & 0x1f) << 6  | (ord($c{1}) & 0x3f);
  if ($ord0 < 0xf0) return ($ord0 & 0x0f) << 12 | (ord($c{1}) & 0x3f) << 6 | (ord($c{2}) & 0x3f);
  return ($ord0 & 0x07) << 18 | (ord($c{1}) & 0x3f) << 12 | (ord($c{2}) & 0x3f) << 6 | (ord($c{3}) & 0x3f);
}

$a = '列';
$b = dechex(utf8ord($a));
var_export($b); // outputs '5217'
函数utf8ord($c){
$ord0=ord($c{0});
如果($ord0<0x80)返回$ord0;

如果($ord0<0xe0)返回($ord0&0x1f),我知道您通常会使用
ord()
获取字符的ASCII码,但在这种情况下,我不知道它是否有效。如果是ASCII码,我会说尝试
ord()
,但这在这里显然不起作用。我能以某种方式将UTF-8转换为ASCII吗?@David19801-否。UTF-8所代表的字符数远远大于ASCII.WORKS!删除“\u”所需的字符数$Escape上的部分以获得所需的输出…这是如何工作的…我不知道…-1输入
“@xdazz Oops失败,其中有一个输入错误。已修复。
function utf8ord($c) {
  $ord0 = ord($c{0});
  if ($ord0 < 0x80) return $ord0;
  if ($ord0 < 0xe0) return ($ord0 & 0x1f) << 6  | (ord($c{1}) & 0x3f);
  if ($ord0 < 0xf0) return ($ord0 & 0x0f) << 12 | (ord($c{1}) & 0x3f) << 6 | (ord($c{2}) & 0x3f);
  return ($ord0 & 0x07) << 18 | (ord($c{1}) & 0x3f) << 12 | (ord($c{2}) & 0x3f) << 6 | (ord($c{3}) & 0x3f);
}

$a = '列';
$b = dechex(utf8ord($a));
var_export($b); // outputs '5217'