2011-02-16 104 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