2011-02-16 162 views
0

我在Amazon SQS和Zend(1.11.2)中遇到了一個相當令人困惑的問題。我將消息發送到隊列中,我已經設置了剪斷,它看起來像這樣:亞馬遜SQS消息中的消息字符編碼問題

$sqs->send($queueURL, "opt1=foo opt2=bar"); 

的消息出現在該應用程序較遠的一側,並被視爲:

"opt1%3Dfoo+opt2%3Dbar" 

接收應用程序使用com.xerox.amazonws.sqs2庫以Java編寫,現在正在生產中。

在Drupal中使用Tarzan的舊版php模塊中有類似的發送代碼,它工作得很好。我已經搜索了很高,並閱讀Zend,亞馬遜和Java庫的文檔,我被卡住了。

字符串的編碼是可以理解的,但我不認識正在使用的方法。進一步的測試表明,單引號,尖括號等也會以十六進制格式轉義。

任何想法?

+0

更多信息。 Zend正在編碼出站郵件和urldecoding入站郵件。從我所看到的Java Typica庫不會執行urldecode中看來。它似乎也是Tarzan PHP庫也沒有進行ulrencoding。我必須忽略互操作性如何與這些庫一起工作。 – Ken 2011-02-18 15:52:48

回答

0

Typica(com.xerox.amazonaws)具有在內部使用的Base64編碼消息的 'encoded' 選項。這是默認設置。

一般來說,我們發現在使用SQS時,使用Base64對消息進行編碼並不麻煩,然後使用URL/percent編碼。

我將Base64 PHP中的消息文本寫到隊列中,Typica應該使用默認配置進行解碼。

+0

這很棒,但像Zend Framework這樣的工具包會在發送消息之前對消息進行URL編碼,並在接收到的消息上進行URL解碼。此行爲不是可選的。看起來,客戶端和服務器需要一個匹配的集合才能工作。 Base64或URL編碼都是很好的選擇,但它們不能互操作。 - Ken – Ken 2011-03-21 13:15:11