通过preg_replace_callback用Ascii替换所有十六进制

时间:2018-10-30 22:42:12

标签: php preg-replace-callback

我正在写一个简单的工具,用它的ascii等价物替换字符串中的所有十六进制。

我可以用正则表达式替换内容;但是,当尝试在十六进制上运行pack时,并没有将其转换为char

$str = '${\\"GL\\x47\\x4c\\x4c\\x53\\"}';
$re = '/(\\\\x[0-9a-fA-F]+)/m';
$str = preg_replace_callback('/(\\\\x[0-9a-fA-F]+)/m', function($matches){
    foreach($matches as $match){

        return pack("H*",bin2hex($match));} 
}, $str);
print_r($str);

1 个答案:

答案 0 :(得分:0)

您为什么要使用bin2hex?我只需从十六进制表示中去除\ x,然后使用新剥离的十六进制字符串作为pack参数:

<?php
$str = '${\\"GL\\x47\\x4c\\x4c\\x53\\"}';
$re = '/(\\\\x[0-9a-fA-F]+)/m';
$str = preg_replace_callback('/(\\\\x[0-9a-fA-F]+)/m', function($matches){
    foreach($matches as $match){
        $match = preg_replace("/\\\\x/","",$match);
        return pack("H*",$match);
    } 
}, $str);
print_r($str);

输出

${\"GLGLLS\"}