Flash到PHP base64编码/解码

时间:2010-05-31 21:43:16

标签: php ajax actionscript-3 base64 jpeg

我正在使用AS3对JPG进行base64编码并将其传递给Javascript。我正在尝试使用AJAX将该base64编码的字符串传递给PHP并让PHP解码它。 (我知道我可以将它发送回Flash并且Flash可以将其解码并发送给PHP,但我正在尝试消除解码端对Flash的需求。)

似乎AS3的encodeToBase64String()函数和PHP的base64_decode()函数不使用相同的算法,因为PHP将其评估为base64编码对象,但似乎无法正确输出。

有没有办法解决这个问题?

注意:请不要发布有关不需要Javascript的帖子。由于此处未详细说明,Javascript是必要的步骤。

4 个答案:

答案 0 :(得分:2)

他们可能以不同的方式映射这些位 - 您有两个选项。你最好的选择是找到一个与flash和php相互作用的类似编码方法,以节省一些额外的工作。如果做不到这一点,你将不得不用另一种语言复制flash / php的base 64编码。

由于您正在使用javascript,您还应该查看phpjs,看看您是否不能使用他们的base64_encode方法,然后通过ajax传递字符串。

答案 1 :(得分:0)

不确定可能导致问题的原因。我已经很多次将base64编码数据从AS3传递给php,并且没有遇到问题。

我通常在AS3端使用Hurlant's Base64 :: encodeByteArray()。

修改

这样的事情可能有助于调试此问题:

        var buffer:ByteArray = new ByteArray();
        for(var i:int = 0; i < 256; i++) {
            buffer[i] = i;
        }

        var str:String = Base64.encodeByteArray(buffer); // this is com.hurlant.util.Base64
        // post your data to your php (directly or through JS)

Php测试代码:

$str = $_REQUEST['str'];

$decoded = base64_decode($str);
file_put_contents("test.txt",$decoded);

在AS端,您发送的字符串对每个可能的字节值进行编码。 php将对其进行解码并将其写入文件。现在,如果使用十六进制编辑器打开生成的文件,您应该看到0到25​​5之间的所有数字(或0x00 ... 0xff)。如果情况并非如此,这可能会对导致问题的原因提供一些提示。

PS:我直接从AS发布到PHP只是为了简化故障排除。也许JS以某种方式弄乱你的数据(不太可能因为base64应该是安全的);但只是放弃问题的可能来源。

答案 2 :(得分:0)

Base64编码是MIME rfc(http://www.faqs.org/rfcs/rfc2045.html)的一部分,因此php和flash版本的行为不应该不同。

当遇到php函数问题时,你应该总是阅读PHP手册中的一些注释(http://ch2.php.net/base64_decode)。我发现有两个人只是通过阅读最热门的评论而遇到类似问题的问题(和解决方案)。

从第一条评论(http://ch2.php.net/manual/en/function.base64-decode.php#92980)开始,当要解码的字符串很大(> 5k)时,这是关于base64_decode()的问题。建议的解决方案是使用这样的东西:

<?php
$decoded = "";
for ($i=0; $i < ceil(strlen($encoded)/256); $i++)
   $decoded = $decoded . base64_decode(substr($encoded,$i*256,256));
?> 

对不起,我不知道有更好的选择。

答案 3 :(得分:0)

我将base64编码的字符串从php传递给flash并使用后退多次 这个类在闪存方面 com.dynamicflash.util.Base64 (您可以下载SWC并将其链接到您的项目)

php侧面的

: 标准库函数base64_encode和base64_decode

所有数据处理均无错误