在PHP中解码字符串

时间:2010-06-24 13:01:35

标签: php javascript

我正在开发一个PHP应用程序,它必须解析由另一个程序发送的字符串。问题是一些字符串有八进制字符和中间的其他一些转义。

因此,而不是script>XYZ,我得到了:

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

我需要打印这个解码后的字符串...我尝试使用octdecurl_decode等,但是一个只能使用一个字符串而另一个不能解码八进制...有人有建议吗?

4 个答案:

答案 0 :(得分:1)

试试这个:

$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部分,我不确定代表什么意思,你能解释一下吗?

答案 1 :(得分:1)

urldecode(stripcslashes("\103RI\120T>XYZ%6En \151\156 d%6Fcu\155%65n.."));

答案 2 :(得分:1)

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

回调可以使用base_convert()(第一种情况下为base_convert($match, 8, 10);第二种情况下为base_convert($match, 16, 10))来转换八进制数或十六进制数。

答案 3 :(得分:0)

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

preg_match_all('/\\\[0-9]{3}/',$octstr,$matches);

$oct = $matches[0];

foreach($oct as $o){
    $octstr = str_replace($o,chr(octdec($o)),$octstr);
}

echo urldecode($octstr);

输出:

CRIPT>XYZnn in documen