【问题标题】:How can I query Google Spreadsheets API with a string value?如何使用字符串值查询 Google 电子表格 API?
【发布时间】:2010-06-09 01:23:31
【问题描述】:

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

"confirmation=$confirmation"

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

未捕获的异常 'Zend_Gdata_App_HttpException' 带有消息 'Expected response code 200, got 400 解析错误:遇到无效令牌'

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

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

【问题讨论】:

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


    【解决方案1】:

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

    "confirmation=\"$confirmation\""
    

    【讨论】:

      【解决方案2】:

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

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

      但无济于事。通过 HTTP Inspector 运行流量(并将 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 检查器运行它,因为这样做:

      echo $query->getQueryUrl();
      

      错误地报告它正在发送上面的字符串,而每个引号之前没有 %5C!只是表明,相信你的代码告诉你的东西永远不会有回报......

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

      【讨论】:

      • 我查看了一些我们的 Ubuntu 服务器,看起来在我们使用的版本中,magic_quotes_gpc 默认设置为开启
      【解决方案3】:

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

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

      您的代码:

      "confirmation=$confirmation"
      

      可能的测试代码:

      "confirmation='$confirmation'"
      

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • Zend 库已经做了 urlencode,所以我自己这样做会导致双重编码。
        【解决方案5】:

        我的解决方案:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-13
          • 2013-06-20
          • 2017-08-22
          • 1970-01-01
          • 1970-01-01
          • 2013-09-27
          相关资源
          最近更新 更多