![](/img/trans.png)
[英]How to convert string with hex characters into readable form in 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.