2

Zend_Gdata_SpreadsheetsListQuery を使用しています。PHPでは、私のクエリは次のとおりです。

"confirmation=$confirmation"

問題は、$confirmation = 'AB-CD-EFG-012345';どうやらハイフンがクエリで問題を引き起こしているようで、スローされる例外は次のとおりです。

キャッチされない例外 'Zend_Gdata_App_HttpException' とメッセージ 'Expected response code 200, got 400 解析エラー: 無効なトークンが見つかりました'

値を引用またはエスケープして、解析エラーが発生しないようにするにはどうすればよいですか? 一重引用符は同じエラーを引き起こします。

編集:二重引用符でテストしていたときに、ユーザー エラーが発生しました。二重引用符は機能します。

4

5 に答える 5

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

これにより、無効なトークン (ステータス 400) エラーが発生していました。%5C%22 (\") エスケープ シーケンスが気に入らなかったのですが、どこから取得したのでしょうか?!

Zends コードの奥深くに「parse_str」が埋め込まれていることがわかりました。これは、何らかの理由で (Ubuntu のデフォルトの php 設定?) 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 に設定されているかどうかを簡単に確認してください!

于 2010-09-15T11:40:12.520 に答える
2

結局のところ、開発用と本番用の2つのスプレッドシートがあり、自分が思っていたものを照会していませんでした..このソリューションは機能します:

"confirmation=\"$confirmation\""
于 2010-06-10T18:07:58.633 に答える
1

これについてZendライブラリを調査しようとしましたが、喜びがありません。

値をアポストロフィで囲むのと同じくらい簡単なことでしょうか?

あなたのコード:

"confirmation=$confirmation"

テスト可能なコード:

"confirmation='$confirmation'"

勝手な提案ですが…

于 2010-06-09T13:17:20.490 に答える
0

使用できますurlencode。ただし、Zend API がそれを処理することを期待しているので、正しく使用していることを確認してください。

于 2010-06-09T01:26:54.637 に答える