0

请看下面的代码:

<?php
$str = 'PD9waHANCiRzdHJpbmcgPSAiYmVhdXRpZnVsIjsNCiR0aW1lID0gIndpbnRlciI7DQoNCiRzdHIg
PSAnVGhpcyBpcyBhICRzdHJpbmcgJHRpbWUgbW9ybmluZyEnOw0KZWNobyAkc3RyLiAiPGJyIC8+
IjsNCg0KZXZhbCgiXCRzdHIgPSBcIiRzdHJcIjsiKTsNCmVjaG8gJHN0cjsNCj8+IA==';
echo base64_decode($str);
?>

这是一个简单的 php 代码,您可以使用以下 URL 解码 base64 字符串:
http ://www.base64decode.org/

为什么这个例子中的 base64_decode() 函数不能完成它的工作。输出如下:

"; eval("\$str = \"$str\";"); echo $str; ?>  

代替 :

<?php
$string = "beautiful";
$time = "winter";

$str = 'This is a $string $time morning!';
echo $str. "<br />";

eval("\$str = \"$str\";");
echo $str;
?> 

有什么问题,我该如何解决大代码?

编辑:
输出有一个不可见的部分,我可以通过页面源找到它。
但为什么我们会有这种反应?
提前致谢

4

5 回答 5

5

问题是您将其视为 HTML。如果您查看源代码或传递标头以使浏览器将其解释为文本,您将看到整个内容。

于 2012-05-17T18:39:59.077 回答
0

你添加了那些换行符吗?

如果你使用这样的代码:

<?php
$str = 'PD9waHANCiRzdHJpbmcgPSAiYmVhdXRpZnVsIjsNCiR0aW1lID0gIndpbnRlciI7DQoNCiRzdHIgPSAnVGhpcyBpcyBhICRzdHJpbmcgJHRpbWUgbW9ybmluZyEnOw0KZWNobyAkc3RyLiAiPGJyIC8+IjsNCg0KZXZhbCgiXCRzdHIgPSBcIiRzdHJcIjsiKTsNCmVjaG8gJHN0cjsNCj8+IA==';
echo base64_decode($str);
?>

它工作得很好。

但是您在字符串中添加了换行符(“\n”)。为了在多条线路上制动它。这就是为什么它不起作用。

如果您需要在多条线路上制动它,您必须这样做:

<?php
$str = 'PD9waHANCiRzdHJpbmcgPSAiYmVhdXRpZnVsIjsNCiR0aW1lID0gIndpbnRlciI7DQoNCiRzdHIg'.
       'PSAnVGhpcyBpcyBhICRzdHJpbmcgJHRpbWUgbW9ybmluZyEnOw0KZWNobyAkc3RyLiAiPGJyIC8+'.
       'IjsNCg0KZXZhbCgiXCRzdHIgPSBcIiRzdHJcIjsiKTsNCmVjaG8gJHN0cjsNCj8+IA==';
echo base64_decode($str);
?>

如果您想将这些换行符保留在字符串中,例如,如果您有一个已经自动换行的大型 base64 编码字符串(通常每行 70-80 个字符),您可以执行以下操作:

$str = 'PD9waHANCiRzdHJpbmcgPSAiYmVhdXRpZnVsIjsNCiR0aW1lID0gIndpb
        nRlciI7DQoNCiRzdHIgPSAnVGhpcyBpcyBhICRzdHJpbmcgJHRpbWUgbW
        9ybmluZyEnOw0KZWNobyAkc3RyLiAiPGJyIC8+IjsNCg0KZXZhbCgiXCR
        zdHIgPSBcIiRzdHJcIjsiKTsNCmVjaG8gJHN0cjsNCj8+IA==';
$str = implode('', preg_split('/\s*/', $str));
echo base64_decode($str);
于 2012-05-17T19:11:33.977 回答
0

eval 语句只执行命令并返回字符串....而您实际需要的是在 eval 内部进行 eval ,这有点荒谬..发生...

于 2012-05-17T18:41:42.290 回答
0

尝试查看您的输出源 - 我很确定完整的内容在那里,但您的浏览器正在尝试将其读取为 HTML。

回显您的 base64 编码 PHP 脚本不会神奇地评估它;你必须自己做:

eval(base64_decode($str));
于 2012-05-17T18:41:42.450 回答
0

试试这个它可能对你有帮助。

$bodyData = strtr($str, array('-' => '+', '_' => '/'));
$messagesDetail['body'] = base64_decode($bodyData);
于 2019-11-18T13:37:27.097 回答