我正在使用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}
如何克服这个问题。
答案 0 :(得分:1)
你不应该编码你在服务器端获得GET参数的字符串。你应该解码它;和GAE为你做这件事。无论谁是客户端(这里:您作为用户)都应该在发出HTTP请求之前对符号进行编码。
您的请求应如下所示:
http://.../?q=1%2B6
我无法抗拒的一条评论: EVAL IS EVIL 。有关如何使用ast.literal_eval(..)
。
答案 1 :(得分:0)