Как я могу запросить Google Spreadsheets API со строковым значением? - PullRequest
2 голосов
/ 09 июня 2010

Я использую Zend_Gdata_SpreadsheetsListQuery. В PHP мой запрос:

"confirmation=$confirmation"

Проблема в том, что $confirmation = 'AB-CD-EFG-012345'; Очевидно, дефисы вызывают проблемы с запросом, и выдается исключение:

Неопределенное исключение «Zend_Gdata_App_HttpException» с сообщением «Ожидаемый код ответа 200, получено 400 Ошибка разбора: обнаружен недопустимый токен '

Как я могу процитировать или экранировать значение, чтобы не вызывать ошибки разбора? Одинарные кавычки вызывают ту же ошибку.

Редактировать: когда я тестировал с двойными кавычками, была ошибка пользователя. Двойные кавычки работают.

Ответы [ 5 ]

2 голосов
/ 15 сентября 2010

Стоит отметить, что вы должны быть осторожны с побегом. Я попробовал это и не получил никакой радости. Я перепробовал много комбинаций по этим направлениям:

$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

Это приводило к ошибкам Invalid Token (Status 400). Ей не понравилась escape-последовательность% 5C% 22 (\ "), но откуда она взялась?!

Оказывается, что в коде Zends встроен "parse_str", который добавлял косые черты в строку запроса, потому что по какой-то причине (Ubuntu по умолчанию конфигурация php?) Magic_quotes_gpc был установлен на On в файле php.ini.

Отключение этого параметра позволило сгенерированным URL-адресам вернуться к:

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

и все начало работать.

Кстати, у меня был , чтобы прибегнуть к его запуску через инспектора HTTP, потому что я делал:

echo $query->getQueryUrl();

неправильно сообщил, что отправлял приведенную выше строку без% 5C перед каждой кавычкой! Просто показывает, что никогда не стоит доверять тому, что говорит вам ваш код ...

Итак, если у вас есть проблемы со структурированными запросами в классах Gdata среды Zend Framework, и простое добавление кавычек не решает эту проблему, быстро взгляните, не установлено ли для magic_quotes_gpc значение On!

2 голосов
/ 10 июня 2010

Как оказалось, у меня было две таблицы, одна для dev и одна для производства, и я не запрашивал тот, который мне показался .. Это решение работает:

"confirmation=\"$confirmation\""
1 голос
/ 09 июня 2010

Я пытался исследовать библиотеку Zend для этого, но у меня нет радости.

Может ли быть что-то столь же простое, как завершение значения в апострофе?

Ваш код:

"confirmation=$confirmation"

Возможный код для тестирования:

"confirmation='$confirmation'"

Просто случайное предложение ...

0 голосов
/ 19 ноября 2013

мое решение:

получить строки, которые точно не соответствуют запросу - по столбцу, который, кажется, не имеет запрещенных букв / знаков.и в скрипте php выполните фильтрацию строк.

0 голосов
/ 09 июня 2010

Вы можете использовать urlencode. Однако я ожидаю, что Zend API справится с этим за вас, поэтому убедитесь, что вы используете его правильно.

...