Замена всего гекса с Ascii через preg_replace_callback - PullRequest
0 голосов
/ 31 октября 2018

Я пишу простой инструмент для замены всех шестнадцатеричных символов в строке на их эквивалент 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 голосов
/ 31 октября 2018

Почему вы используете bin2hex? Я просто удалил бы \ x из шестнадцатеричного представления и использовал бы недавно раздетую шестнадцатеричную строку в качестве аргумента пакета:

<?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\"}
...