Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的字符串解码_Php_Javascript - Fatal编程技术网

PHP中的字符串解码

PHP中的字符串解码,php,javascript,Php,Javascript,我正在开发一个PHP应用程序,它必须解析另一个程序发送的字符串。问题是一些字符串在中间有八进制字符和一些其他的转义。 因此,我得到的不是script>XYZ,而是: \103RI\120T>XYZ%6En\151\156 d%6Fcu\155%65n.. 我需要把解码后的字符串打印回来。。。我试着使用了octdec,url\u decode,等等,但是其中一个只能使用一个字符,而另一个不能解码八进制。。。有人有什么建议吗?试试这个: $str = '\103RI\120T>XYZ%6En

我正在开发一个PHP应用程序,它必须解析另一个程序发送的字符串。问题是一些字符串在中间有八进制字符和一些其他的转义。 因此,我得到的不是
script>XYZ
,而是:

\103RI\120T>XYZ%6En\151\156 d%6Fcu\155%65n..

我需要把解码后的字符串打印回来。。。我试着使用了octdec,
url\u decode
,等等,但是其中一个只能使用一个字符,而另一个不能解码八进制。。。有人有什么建议吗?

试试这个:

$str = '\103RI\120T>XYZ%6En \151\156 d%6Fcu\155%65n..';

// CRIPT>XYZnn in documen..
echo preg_replace(array('~\\\(\d+)~e', '~%([0-9A-F]{2})~e'), array('chr(octdec("$1"))', 'chr(hexdec("$1"))'), $str);
关于
%AD
部分,我不确定代表什么,您能解释一下吗?

使用。使用同时匹配八进制数和转义符的模式(确保同时匹配
\
%
字符)。基于第一个字符,回调函数应该能够理解是转换八进制数还是转换转义序列

urldecode(stripcslashes("\103RI\120T>XYZ%6En \151\156 d%6Fcu\155%65n.."));
回调函数可以使用(
base\u convert($match,8,10)
在第一种情况下使用(
base\u convert($match,16,10)
在第二种情况下使用(
base\u convert($match,16,10)
从八进制或十六进制转换数字

产出:

CRIPT>XYZnn in documen

从这样一个小片段很难分辨:你试过base64吗?@Mark:不可能是base64。后者应该如何处理?@Alix Axel:区别在于第一个是八进制数,另一个是十六进制数。如果回调函数接收到数字之前的字符,它应该能够理解是否接收到我把一个八进制数(以
开头的数字)或一个十六进制数(以
%
开头的数字)作为一个数字。这就是我想的,
hexdec()
抛出了一个错误,但我现在已经解决了。不需要使用回调,
preg\u replace()
就可以了,检查我的答案。
stripcslashes()
不处理
%AE
;它处理
\xAE
CRIPT>XYZnn in documen