请参见下面的代码:
<?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;
?>
是什么问题,如何解决大代码?
编辑:有输出的不可见部分,我可以通过页面源找到它。但是为什么会有这种反应?在此先感谢
问题是您正在以HTML格式查看它。如果查看源代码或传递标题以使浏览器将其解释为文本,则会看到整个内容。
eval语句仅执行命令并返回字符串。...而您真正需要的是在评估中进行评估,这是荒谬的..要发生...
尝试查看输出的源-我很确定所有内容都在这里,但是您的浏览器正在尝试将其读取为HTML。
回显您的base64编码的PHP脚本并不能神奇地对其进行评估;您必须自己做:
eval(base64_decode($str));
您是否添加了这些换行符?
如果您使用这样的代码:
<?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);
尝试一下,可能会对您有所帮助。
$bodyData = strtr($str, array('-' => '+', '_' => '/'));
$messagesDetail['body'] = base64_decode($bodyData);