【问题标题】:why base64_decode() output by echo() can not show itself completely in browser?为什么 echo() 输出的 base64_decode() 不能在浏览器中完全显示?
【发布时间】:2012-05-17 18:37:32
【问题描述】:

请看下面的代码:

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

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

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

【问题讨论】:

  • 永远不要默认假设某些东西被破坏了 - 默认假设你做错了。
  • 在您的 Internet Explorer 中,右键单击该网页,然后单击“查看源代码”。都在那里。
  • 嗨,我很抱歉耽搁了。我看到了页面源,不可见的部分就在那里。那到底是怎么回事?
  • @Xeoncross 除非它的 Internet Explorer。你可以放心地假设它坏了:)

标签: php base64 decode encode


【解决方案1】:

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

【讨论】:

  • 嗨,感谢您的回答/那么我可以为大代码做什么?我想编码和使用它们。
  • 通过使用 eval() 函数 - 这就是为什么问这样的问题。我想了解 eval() 和 echo() 以及 base64_decode() 是如何工作的?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    eval(base64_decode($str));
    

    【讨论】:

    • 大家好,我很抱歉耽搁了。我看到了页面源代码,不可见的部分就在那里。那么这是怎么回事呢?亲爱的 Repo,你的代码有解析错误 -> eval(base64_decode($str));
    • 你的正确语法是这样的 -> eval("base64_decode(\$str);");我真的很想知道为什么这段代码的输出是空白的(白屏)?我会问另一个问题!
    【解决方案4】:

    你添加了那些换行符吗?

    如果你使用这样的代码:

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

    【讨论】:

    • 嗨,那么对于大的 base64 代码我该怎么办?我不能在每一行都加上单引号和点!
    • 我会用详细信息更新我的答案。你更新你的问题。好吗?
    • 非常感谢您的回答,抱歉耽搁了。我测试了你的代码(全部),我认为这个问题与新行无关。您的代码的第三部分也有错误!你自己测试过吗?
    • 我做了,但在我将其粘贴到网站后对其进行了一些更改(并且没有测试更改)。
    【解决方案5】:

    试试这个也许对你有帮助。

    $bodyData = strtr($str, array('-' => '+', '_' => '/'));
    $messagesDetail['body'] = base64_decode($bodyData);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      • 2013-03-15
      • 1970-01-01
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多