使用Python对GAE查询字符串进行URL编码

使用Python对GAE查询字符串进行URL编码,python,google-app-engine,urllib,url-encoding,Python,Google App Engine,Urllib,Url Encoding,我正在用Python用GAE编程一个在线表达式计算器。我使用查询字符串获取查询,然后计算表达式。例如,对于ishamsample.appspot.com/eval?q=9-6浏览器应该显示{9-3}{6}这样的查询工作正常,但问题是+symbolishamsample.appspot.com/eval?q=1+6下面是我的代码。我试着引用URL class Eval(webapp2.RequestHandler): def get(self): q=self.reques

我正在用Python用GAE编程一个在线表达式计算器。我使用查询字符串获取查询,然后计算表达式。例如,对于
ishamsample.appspot.com/eval?q=9-6
浏览器应该显示
{9-3}{6}
这样的查询工作正常,但问题是+symbol
ishamsample.appspot.com/eval?q=1+6
下面是我的代码。我试着引用URL

class Eval(webapp2.RequestHandler):
    def get(self):
        q=self.request.get('q')
        q=urllib.quote(q)
        code=eval(compile(q,'<string>', 'eval', __future__.division.compiler_flag))
        self.response.write('{'+q+'}{'+str(code)+'}')
class Eval(webapp2.RequestHandler):
def get(自我):
q=self.request.get('q')
q=urllib.quote(q)
代码=eval(编译(q,,'eval',未来\除法.编译器\标志))
self.response.write('{'+q+'}{'+str(代码)+'}'))
对于该浏览器,输出显示为
{1%206}{1}

如何克服这个问题。

  • 是一个特殊的符号,应该用来代替空格。在url中,您应该有%2B。如果从文本输入发布查询,则应自然对其进行编码。与python或GAE无关
      • 是一个特殊的符号,应该用来代替空格。在url中,您应该有%2B。如果从文本输入发布查询,则应自然对其进行编码。与python或GAE无关

      不应该对服务器端作为get参数获取的字符串进行编码。你应该解码它;盖伊为你做的。无论客户机是谁(此处:您作为用户),都应该在发出HTTP请求之前对符号进行编码

      您的请求应该如下所示:

      http://.../?q=1%2B6
      


      我忍不住要说一句话:评估是邪恶的。关于如何使用
      ast.literal\u eval(..)
      执行此操作,请参阅a。您不应将服务器端获取的字符串编码为get参数。你应该解码它;盖伊为你做的。无论客户机是谁(此处:您作为用户),都应该在发出HTTP请求之前对符号进行编码

      您的请求应该如下所示:

      http://.../?q=1%2B6
      


      我忍不住要说一句话:评估是邪恶的。关于如何使用ast.literal\u eval(..)

      在URL中使用Nope,用户使用+符号,这就是我需要URL编码的原因。例如,如果用户将
      ishamsample.appspot.com/eval?q=1+6
      编码为
      +
      %2B
      ,并给出结果为
      {1+6}{7}
      。大多数用户不知道+的URL值,因此我们必须对其进行编码。@Ishammond他说的话实际上是正确的。所以我这边有一个+1。不在URL中,用户放+号,这就是为什么我需要URL编码的原因。例如,如果用户将
      ishamsample.appspot.com/eval?q=1+6
      编码为
      +
      %2B
      ,并给出结果为
      {1+6}{7}
      。大多数用户不知道+的URL值,因此我们必须对其进行编码。@Ishammond他说的话实际上是正确的。我这边的a+1。谢谢你的澄清。谢谢你的澄清。