Как я могу запросить API электронных таблиц Google со строковым значением?


Я использую запрос zend_gdata_spreadsheetslist. В PHP мой запрос таков:

"confirmation=$confirmation"

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

Неперехваченное исключение "Исключение zend_gdata_app_httpexception" с сообщением "Ожидаемый код ответа 200, получено 400 Ошибка синтаксического анализа: Обнаружен недопустимый токен"

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

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

Author: ColinM, 2010-06-09

5 answers

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

"confirmation=\"$confirmation\""
 2
Author: ColinM, 2010-06-10 18:07:58

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

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

Но безрезультатно. Запуск трафика через HTTP-инспектор (и настройка вашего HTTP-клиента Zend для запуска через прокси-сервер - это еще одна вещь, на которую стоит обратить внимание!) Я мог видеть, что сгенерированные URL-адреса из этой работы выглядят следующим образом:

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

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

Оказывается, что в коде Zends глубоко встроен "parse_str", который добавлял косые черты в строку запроса, потому что по какой-то причине (конфигурация php по умолчанию Ubuntu?) Для 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 значение Вкл!

 2
Author: reefnet_alex, 2010-09-15 11:46:33

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

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

Ваш код:

"confirmation=$confirmation"

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

"confirmation='$confirmation'"

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

 1
Author: Luke Stevenson, 2010-06-09 13:17:20

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

 0
Author: Matthew Flaschen, 2010-06-09 01:26:54

Мое решение:

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

 0
Author: Michal Wrd, 2013-11-19 09:17:02