Привет, сообщество StackOverflow,
Вот мой вопрос, как преобразовать php с шестнадцатеричным кодом в читаемую строку? Что я имею в виду, это все внутри этого 2 php-кода ..
<?php echo "\x74\150\x69\163\x20\151\x73\40\x74\145\x73\164\x69\156\x67\40\x6f\156\x6c\171"; echo test['\x74\171\x70\145']; echo range("\x61","\x7a"); ?>
это нечитаемый код, мне нужна некоторая функция php, которая может конвертировать эти нечитаемые коды в читаемый код .. так будет после этого конвертировать.
<?php echo "this is testing only"; echo test['type']; echo range("a","z"); ?>
Я знаю, что могу просто откликнуться на этот шестнадцатеричный текст, чтобы изменить его на читаемую строку, но у меня есть огромный файл php и многофайловый php-файл, который такой же, как этот, поэтому мне нужна функция php, которая может автоматически преобразовать их все в читаемый код.
Спасибо ..
Кажется, ваш код запутан не только с шестнадцатеричными escape-последовательностями, но и с восьмеричным. Я написал эту функцию для ее декодирования:
function decode_code($code){ return preg_replace_callback( "@\\\(x)?([0-9a-f]{2,3})@", function($m){ return chr($m[1]?hexdec($m[2]):octdec($m[2])); }, $code ); }
Смотрите здесь в действии: http://codepad.viper-7.com/NjiL84
У меня был смешанный контент, где кроме гексагона и окта были также обычные символы.
Поэтому, чтобы обновить код Шона выше, я добавил следующее
function decode_code($code) { return preg_replace_callback('@\\\(x)?([0-9a-f]{2,3})@', function ($m) { if ($m[1]) { $hex = substr($m[2], 0, 2); $unhex = chr(hexdec($hex)); if (strlen($m[2]) > 2) { $unhex .= substr($m[2], 2); } return $unhex; } else { return chr(octdec($m[2])); } }, $code); }
Пример строки
"\152\163\x6f\x6e\137d\x65\143\157\x64e"
Декодированный выход
"json_decode"
Для этого вы можете использовать собственную функцию urldecode () PHP. Просто передайте шестнадцатеричную кодированную строку в функцию, а вывод будет строкой в читаемом формате.
Вот пример кода для демонстрации:
<?php echo urldecode("\x74\150\x69\163\x20\151\x73\40\x74\145\x73\164\x69\156\x67\40\x6f\156\x6c\171"); ?>
Это должно выводиться: это только тестирование
– ищущие01