如何使用字符串值查询Google Spreadsheets API?

时间:2010-06-09 01:23:31

标签: php zend-framework google-sheets google-data-api

我正在使用Zend_Gdata_SpreadsheetsListQuery。在PHP中我的查询是:

"confirmation=$confirmation"

问题是$confirmation = 'AB-CD-EFG-012345';显然连字符会导致查询出现问题,抛出的异常是:

  

未捕获的异常'Zend_Gdata_App_HttpException',消息'预期响应代码200,得到400   解析错误:遇到无效的令牌“

如何引用或转义值以不导致解析错误?单引号会导致相同的错误。

编辑:当我使用双引号进行测试时,出现了用户错误。双引号有效。

5 个答案:

答案 0 :(得分:2)

事实证明我有两个电子表格,一个用于开发,一个用于制作,我没有查询我认为的那个..这个解决方案有效:

"confirmation=\"$confirmation\""

答案 1 :(得分:2)

值得注意的是,你必须小心逃避。我试过这个并没有得到任何快乐。我尝试了很多这样的组合:

$query->setSpreadsheetQuery("name=\"Andrew John\"");

但无济于事。通过HTTP Inspector运行流量(并设置Zend HTTP Client以通过代理运行是另一件值得关注的事情!)我可以看到这个工作生成的URL看起来像这样:

http://spreadsheets.google.com:80/feeds/list/spreadsheetkey/od6/private/full?sq=name%3D%5C%22Andrew+John%5C%22

这导致无效令牌(状态400)错误。它不喜欢%5C%22(\“)转义序列,但是从哪里获取它?!

事实证明,在Zends代码中嵌入了一个“parse_str”,它在查询字符串中添加了斜杠,因为出于某种原因(Ubuntu默认php配置?),magic_quotes_gpc在php.ini文件中设置为On。

关闭此选项后,生成的网址可以恢复为:

http://spreadsheets.google.com:80/feeds/list/spreadsheetkey/od6/private/full?sq=name%3D%22Andrew+John%22

一切都开始了。

顺便说一句,我已经诉诸于通过HTTP Inspector运行它,因为这样做:

echo $query->getQueryUrl();

错误地报告它在每个引用之前发送了没有%5C的字符串!只是去展示,相信你的代码告诉你的东西永远都不值得......

因此,如果您在Zend框架的Gdata类中遇到结构化查询的问题而只是添加引号并不能解决它,请快速查看是否已将magic_quotes_gpc设置为On!

答案 2 :(得分:1)

我试图为此研究Zend库,但我没有快乐。

这可能就像在撇号中包装值一样简单吗?

您的代码:

"confirmation=$confirmation"

可能的测试代码:

"confirmation='$confirmation'"

随意的建议......

答案 3 :(得分:0)

您可以使用urlencode。但是,我希望Zend API可以为您处理,所以请检查您是否正确使用它。

答案 4 :(得分:0)

我的解决方案:

获取与查询不完全匹配的行 - 由似乎没有禁止字母/符号的列。并在PHP脚本中对行进行过滤。