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

时间:2013-11-15 14:09:39

标签: python google-app-engine urllib url-encoding

我正在使用Python在GAE中编写在线表达式计算器。我使用查询字符串来获取查询,然后评估表达式。例如,ishamsample.appspot.com/eval?q=9-6浏览器应显示{9-3}{6}这样的查询工作正常,但问题是+符号。 ishamsample.appspot.com/eval?q=1+6以下是我的代码。我试过网址引用

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)+'}')

对于该浏览器显示输出为{1%206}{1} enter image description here

如何克服这个问题。

2 个答案:

答案 0 :(得分:1)

不应该编码你在服务器端获得GET参数的字符串。你应该解码它;和GAE为你做这件事。无论谁是客户端(这里:您作为用户)都应该在发出HTTP请求之前对符号进行编码。

您的请求应如下所示:

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

我无法抗拒的一条评论: EVAL IS EVIL 。有关如何使用ast.literal_eval(..)

,请参阅similar question.

答案 1 :(得分:0)

  • 是一个特殊符号,它应该替换空格。在网址中你应该有%2B。如果您从文本输入发布查询,它应该自然编码。与python或GAE无关