请参阅以下代码:
<?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;
?>
问题是什么?如何解决大代码?
编辑:
输出中有一个不可见的部分,我可以通过页面源找到它
但为什么我们有这种反应呢?
提前谢谢
答案 0 :(得分:5)
问题在于您将其视为HTML。如果您查看源代码或传递标题以使浏览器将其解释为文本,您将看到整个内容。
答案 1 :(得分:0)
eval语句只执行命令并返回字符串.... 你真正需要的是在eval内部进行评估,这有点荒谬......发生......
答案 2 :(得分:0)
尝试查看输出的来源 - 我很确定完整的内容存在,但您的浏览器正在尝试将其作为HTML读取。
回显base64编码的PHP脚本并没有神奇地评估它;你必须自己做:
eval(base64_decode($str));
答案 3 :(得分: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);
答案 4 :(得分:0)
尝试一下可能对您有帮助。
$bodyData = strtr($str, array('-' => '+', '_' => '/'));
$messagesDetail['body'] = base64_decode($bodyData);