簡體   English   中英

將Hex代碼轉換為PHP中的可讀字符串

[英]Convert Hex Code into readable string in PHP

您好,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函數,可以自動將它們全部轉換為可讀代碼。

謝謝..

看起來您的代碼不僅使用十六進制轉義序列進行混淆,而且還使用八進制進行混淆。 我寫了這個函數來為你解碼:

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

我有混合的內容除了十六進制和oct之外還有正常的字符。

所以為了更新Sean的代碼,我添加了以下內容

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"

您可以使用PHP的本機urldecode()函數來實現此目的。 只需將十六進制編碼的字符串傳遞給函數,輸出就是可讀格式的字符串。

以下是演示的示例代碼:

<?php

echo urldecode("\x74\150\x69\163\x20\151\x73\40\x74\145\x73\164\x69\156\x67\40\x6f\156\x6c\171");

?>

這應該輸出:這只是測試

- seekers01

如果沒有其他轉義序列,或者你不介意不僅轉換十六進制轉義序列,還要轉換一些特殊字符(例如\\0\\a\\b\\f\\n\\r ,也可以使用stripcslashes \\r\\t\\v )。

但是如果您只想轉換十六進制序列,可以使用preg_replace_callback來限制應該更改的序列,如下所示:

function hex2str($string) {
    return preg_replace_callback(
        '/(\\\\x[a-f\d]{2})+/i', 
        function ($matches) {
            return stripcslashes($matches[0]);
        },
        $string
    );
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM