2015-01-06 134 views
0

我曾將Google Apps用作Web應用程序的REST API,但發現每當我嘗試插入新記錄時,API都不會保留加號。由於瀏覽器上的起始策略相同,JSON必須作爲URL上的參數傳遞給API。該過程首先對JSON進行了劃分,然後使用JavaScript中的轉義函數對值進行了轉義。在Google Apps腳本+ MySQL中將空格轉換爲空格

但是,一旦請求到達Google Apps,Google進程在到達doGet()之前解析請求對象,將未轉義的「+」視爲空格。

這是一個非常瘋狂的錯誤識別,所以如果有人遇到它,我希望我的經驗解決它的幫助。只需使用encodeURIComponent()而不是escape(),那應該可以做到。

+2

查看準備好的語句。不需要轉義。 – David

+1

@David我已經做了,但無論如何都不能避免轉義某些字符,因爲該語句可能包含需要轉義的字符串。另外,使用準備好的語句爲我的sql builder增加了很多複雜性。我寧願用JavaScript處理轉義,但我需要知道所有需要轉義的字符。顯然,甲骨文公司的某個人在編寫關於此事的足夠全面的文檔方面放棄了這一決定,因爲「出人意料!」字面加號在文檔中沒有列出作爲逃逸字符。我不希望有更多的驚喜。 –

+1

「字面加號在文檔中沒有被列爲逃生字符」---這是因爲*驚喜*'+'在一般的SQL和它的mysql方言中並不是什麼特殊的。對於你的任務,你不需要照顧至少一半你列舉的逃生序列。 「 – zerkms

回答

0

什麼是紅鯡魚!

所以這就是發生了什麼。我有一個URL,其中包含對API的請求,以插入包含正值的記錄。客戶端,我正在使用轉義函數來執行此操作,但轉義函數未對加號進行編碼。但是,當請求通過服務器端發送時,顯然Google Apps後端的任何組件都會解析URL參數,然後將加號視爲空間。這很難識別,因爲在Google Apps腳本本身中,使用unescape成功解碼參數,從而看起來MySQL是問題所在。

解決方案?我切換到使用encodeURIComponent而不是轉義,現在它工作!

3

沒有一個。

使用準備好的語句。他們刪除任何需要關心你作爲參數傳遞的信息。這就是他們存在的原因。

+0

謝謝,但我真的認爲必須有更好的方法去完成這項工作,而不是完全修改我的項目的一個小加號。吻。我總是可以通過應用程序層可以處理的方式來修改輸入。 –

+0

呃......加上符號無論如何都是無害的......而且很難得到比預先準備好的語句更簡單的東西。 –

+0

這只是我寫的自定義控制器如何工作的問題。重新設計它來處理準備好的語句是很多工作的一小部分收穫。 –

相關問題