我有 $_SERVER['REDIRECT_SSL_CLIENT_S_DN'] 内容,其中包含某种十六进制数据。我该如何解码它?
$_SERVER['REDIRECT_SSL_CLIENT_S_DN'] = '../CN=\x00M\x00\xC4\x00,\x00I\x00S\x00,\x004\x000\x003\x001\x002\x000\x000\x002/SN=..';
$pattern = '/CN=(.*)\\/SN=/';
preg_match($pattern, $_SERVER['REDIRECT_SSL_CLIENT_S_DN'], $server_matches);
print_r($server_matches[1]);
结果是:
\x00M\x00\xC4\x00,\x00I\x00S\x00,\x004\x000\x003\x001\x002\x000\x000\x002
我需要的结果是:
马,IS,40312002
我尝试用chr(hexdec($value));
解码它,它几乎可以工作,但在html输入中我看到很多问号。
编辑: 附加测试结果。尚未完美。数组显示一些错误:http://pastebin.com/BC4xxqmE
最佳答案
使用utf8_encode
后,您现在拥有一个多字节字符串。这意味着您需要使用 PHP 的 multibyte (mb_
)功能。
因此,str_split
将不再起作用。您需要将 mb_split
或 preg_split
与 u
标志一起使用。
$splitted = preg_split('//u', $string);
这是一个演示,显示您的代码现在正在运行:http://ideone.com/nqeC0U
关于php - 如何解码十六进制内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16090196/