2

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

"confirmation=$confirmation"

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

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

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

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

4

5 回答 5

2

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

"confirmation=\"$confirmation\""
于 2010-06-10T18:07:58.633 回答
2

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

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

但无济于事。通过 HTTP 检查器运行流量(并将 Zend HTTP 客户端设置为通过代理运行是另一件值得关注的事情!)我可以看到从这项工作生成的 URL 如下所示:

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

这导致了 Invalid Token (Status 400) 错误。它不喜欢 %5C%22 (\") 转义序列,但它是从哪里得到的?!

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

关闭此功能允许生成的 URL 恢复为:

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!

于 2010-09-15T11:40:12.520 回答
1

我曾尝试为此研究 Zend 库,但没有任何乐趣。

是否可以像将值包含在撇号中一样简单?

你的代码:

"confirmation=$confirmation"

可能的测试代码:

"confirmation='$confirmation'"

只是一个随机的建议...

于 2010-06-09T13:17:20.490 回答
0

您可以使用urlencode. 但是,我希望 Zend API 能够为您处理这个问题,因此请检查您是否正确使用它。

于 2010-06-09T01:26:54.637 回答
0

我的解决方案:

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

于 2013-11-19T09:17:02.370 回答