为什么echo()输出的base64_decode()无法在浏览器中完全显示其自身?

问题描述 投票:0回答:5

请参见下面的代码:

<?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;
?> 

是什么问题,如何解决大代码?

编辑:有输出的不可见部分,我可以通过页面源找到它。但是为什么会有这种反应?在此先感谢

php base64 decode encode
5个回答
5
投票

问题是您正在以HTML格式查看它。如果查看源代码或传递标题以使浏览器将其解释为文本,则会看到整个内容。


0
投票

eval语句仅执行命令并返回字符串。...而您真正需要的是在评估中进行评估,这是荒谬的..要发生...


0
投票

尝试查看输出的源-我很确定所有内容都在这里,但是您的浏览器正在尝试将其读取为HTML。

回显您的base64编码的PHP脚本并不能神奇地对其进行评估;您必须自己做:

eval(base64_decode($str));

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);

0
投票

尝试一下,可能会对您有所帮助。

$bodyData = strtr($str, array('-' => '+', '_' => '/'));
$messagesDetail['body'] = base64_decode($bodyData);
© www.soinside.com 2019 - 2024. All rights reserved.