PHP的base64_decode在IIS中返回错误的结果

时间:2014-05-05 09:42:31

标签: php wcf iis base64 jpeg

我正在尝试使用以下代码显示以前在WCF Web服务中编码的jpg:

<?php
require_once '../inc/config.php';
[...]
header("Content-type: image/jpg");
echo base64_decode($doc['BDATA']);

但我得到了一个

Can't display the image because it contains errors.

我已在此网络应用www.opinionatedgeek.com/dotnet/tools/base64decode/中解码了base64字符串,结果是正确的,但与我base64_decode获得的结果不同,这是错误的。

编辑:我有两个使用相同代码的环境:测试和制作。它在Test中工作正常,但在Production中没有,所以我在思考一些配置问题。

我正在使用PHP 5.5.9中的Microsoft IIS

base64_decode解码不好的字符串示例: /9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAABAAEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKAP/2Q==

有什么想法吗?

编辑2 :如果我评论此行 require_once '../inc/config.php'; 并将代码从config.php复制到我的实际文件,它工作正常。可能会发生什么?

2 个答案:

答案 0 :(得分:0)

来自base_64_decode manual评论

  

php&lt; = 5.0.5的base64_decode($ string)将假设空格为   意思是+符号,其中php&gt; = 5.1.0的base64_decode($ string)   将不再做出这样的假设

要解决此问题,请尝试使用此代码

$encodedData = str_replace(' ','+',$encodedData);
$decocedData = base64_decode($encodedData);

因为这不是你的情况,所以你必须check this answer
因为每件事都适合我(WAMP)

编辑: 如下面的对话

  

有很多东西可能会损坏标题,例如,如果   你的文件编码是UTF-8然后你应该保存为UTF-8没有   你可以使用notepad ++来做到这一点,也确保你使用FTP   您的客户端没有任何字符到您的文件,而不是   每件事都应该可以正常工作

答案 1 :(得分:0)

base64编码没有完全标准化。

某些实现使用不同的字符,因此您必须在运行解码之前替换这些字符。

further details