代码之家  ›  专栏  ›  技术社区  ›  ColinM

如何使用字符串值查询Google电子表格API?

  •  2
  • ColinM  · 技术社区  · 14 年前

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

    "confirmation=$confirmation"
    

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

    未捕获异常“zend_gdata_app_httpexception”,消息为“预期响应代码200,得到400” 分析错误:遇到无效的标记'

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

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

    5 回复  |  直到 11 年前
        1
  •  2
  •   ColinM    14 年前

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

    "confirmation=\"$confirmation\""
    
        2
  •  2
  •   reefnet_alex    14 年前

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

    $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
    

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

    结果发现Zends代码中有一个“parse_str”,由于某种原因(ubuntu默认php-config?),它向查询字符串添加了斜杠。在php.ini文件中将magic_quotes_gpc设置为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!

        3
  •  1
  •   Luke Stevenson    14 年前

    我试着为这个研究Zend图书馆,但是我没有快乐。

    它能像用撇号包装值那样简单吗?

    您的代码:

    "confirmation=$confirmation"
    

    可能的测试代码:

    "confirmation='$confirmation'"
    

    只是一个随机的建议…

        4
  •  0
  •   Matthew Flaschen    14 年前

    你可以使用 urlencode . 但是,我希望ZendAPI能够为您处理这个问题,所以请检查您是否正确地使用它。

        5
  •  0
  •   Michal - wereda-net Stinky Tofu    11 年前

    我的解决方案:

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