Как я могу запросить API электронных таблиц Google со строковым значением?
Я использую запрос zend_gdata_spreadsheetslist. В PHP мой запрос таков:
"confirmation=$confirmation"
Проблема в том, что $confirmation = 'AB-CD-EFG-012345';
По-видимому, дефисы вызывают проблемы с запросом, и возникает исключение:
Неперехваченное исключение "Исключение zend_gdata_app_httpexception" с сообщением "Ожидаемый код ответа 200, получено 400 Ошибка синтаксического анализа: Обнаружен недопустимый токен"
Как я могу процитировать или экранировать значение, чтобы не вызывать ошибок синтаксического анализа? Одинарные кавычки вызывают то же самое ошибка.
Редактировать: Когда я тестировал с двойными кавычками, произошла ошибка пользователя. Двойные кавычки работают.
5 answers
Как оказалось, у меня было две электронные таблицы, одна для разработчиков и одна для производства, и я не запрашивал ту, о которой думал.. Это решение работает:
"confirmation=\"$confirmation\""
Стоит отметить, что вы должны быть осторожны с побегом. Я попробовал это и не получил никакой радости. Я перепробовал множество комбинаций в этом направлении:
$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 значение Вкл!
Я пытался исследовать библиотеку Zend для этого, но у меня нет радости.
Может ли это быть что-то столь же простое, как обертывание значения в апострофах?
Ваш код:
"confirmation=$confirmation"
Возможный код для тестирования:
"confirmation='$confirmation'"
Просто случайное предложение...
Вы можете использовать urlencode
. Тем не менее, я бы ожидал, что API Zend справится с этим за вас, поэтому убедитесь, что вы используете его правильно.
Мое решение:
Получите строки, которые точно не соответствуют запросу - по столбцу, в котором, похоже, нет запрещенных букв/знаков. и в php-скрипте выполните фильтрацию строк.