2010-05-31 121 views
2

我正在使用AS3對base64進行編碼,並將其傳遞給Javascript。我試圖使用AJAX將該base64編碼的字符串傳遞給PHP並讓PHP對其進行解碼。 (我知道我可以將它發送回Flash,Flash可以將其解碼併發送給PHP,但我試圖在解碼端消除對Flash的需求)。Flash到PHP base64編碼/解碼

看來AS3的encodeToBase64String()函數和PHP的base64_decode()函數不使用相同的算法,因爲PHP會將其評估爲base64編碼對象,但似乎並未正確輸出。

有沒有辦法糾正這個問題?

注意:請不要發佈關於不需要Javascript的文章。由於未在此處詳述的原因,JavaScript是必要步驟。

+0

這是什麼意思「似乎沒有正確輸出」?打印解碼數據之前,您是否發送了適當的內容類型標題? – 2010-05-31 22:45:48

回答

0

不確定什麼可能會造成麻煩。我已經很多次將base64編碼的數據從AS3傳遞到php,並且沒有遇到問題。

我一般用Hurlant's的Base64 :: encodeByteArray()在AS3方面,雖然。

編輯

像這樣的東西可以幫助調試這個問題:

 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應該是安全的);但只是爲了拋棄問題的可能來源。

+0

指向正在工作的as3 base64編碼器的鏈接!謝謝你從互聯網上的人!我的照相機現在是一個實用的照相機! – 2011-08-08 03:09:29

2

它們可能會以不同的方式映射位 - 您有幾個選項。你最好的選擇是找到一種類似的編碼方法,相互閃存和PHP,以節省自己一些額外的工作。否則,你將不得不復制其他語言的flash/php的base64編碼。

由於您使用的JavaScript,你也應該看看phpjs,看看你能不能用自己的BASE64_ENCODE方法,然後通過AJAX通過串關。

+0

我只是想發佈有關phpjs版本的base64_encode + rep – 2010-05-31 21:51:00

+0

我們實際上並沒有在Javascript中進行任何編碼/解碼。這是因爲AS3返回給JS的JPG字節數組似乎缺少它的方法,所以我們在AS3中將它編碼發送給JS之前進行編碼。 – Gus 2010-05-31 22:00:43

+0

@Gus:我還是不明白爲什麼你不能簡單地將它傳遞給javascript。字節數組'缺乏方法'意味着什麼? – Cam 2010-05-31 22:25:13

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),這是關於base64_decode()問題,當要解碼的字符串很大(> 5k)時。建議的解決方案是使用這樣的東西:

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

對不起,我不知道更好的選擇。

0

我通過使用 在閃光燈側該類 com.dynamicflash.util.Base64 在PHP端(你可以下載SWC並將其鏈接到你的項目)

從PHP編碼字符串的base64閃爍,後面很多次: 非標準庫函數base64_encode和base64_decode

所有數據處理沒有錯誤