我正在使用AS3对JPG进行base64编码并将其传递给Javascript。我正在尝试使用AJAX将该base64编码的字符串传递给PHP并让PHP解码它。 (我知道我可以将它发送回Flash并且Flash可以将其解码并发送给PHP,但我正在尝试消除解码端对Flash的需求。)
似乎AS3的encodeToBase64String()
函数和PHP的base64_decode()
函数不使用相同的算法,因为PHP将其评估为base64编码对象,但似乎无法正确输出。
有没有办法解决这个问题?
注意:请不要发布有关不需要Javascript的帖子。由于此处未详细说明,Javascript是必要的步骤。
答案 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到255之间的所有数字(或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
所有数据处理均无错误