2015-01-06 76 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

这只是我写的自定义控制器如何工作的问题。重新设计它来处理准备好的语句是很多工作的一小部分收获。 –

相关问题