我正在尝试获取传递URL中编码字符串的请求。例如:
/application/controller/function/hello%20world
这样在我的函数中我可以访问request.args并得到一个我可以取消引用的字符串()。
我尝试修改rewrite.py以不转换%20,但这导致了一些错误。还有一些东西正在寻找我无法找到的地方。我注意到httpserver.log文件有:
127.0.0.1, 2011-09-02 00:12:09, GET, /application/controller/function/hello world, HTTP/1.1, 200, 0.169954
已经转换了空间。也许这给了一个提示。网址在哪里被取消编码?
以下是我的路线文件的内容:
#!/usr/bin/python
# -*- coding: utf-8 -*-
default_application = 'chips'
default_controller = 'default'
default_function = 'index'
routes_onerror = [
(r'*/404', r'/chips/static/404.html')
,(r'*/*', r'/chips/static/error.html')
]
答案 0 :(得分:2)
默认情况下,除了'@',' - ','='和'。'之外,web2py不允许使用args中的特殊字符。要覆盖该行为,可以将以下内容添加到routes.py:
routes_apps_raw=['chips']
在这种情况下,request.args将设置为None
,您可以通过request.raw_args
从URL访问原始参数。但请注意,如果您使用parameter-based rewrite system routes_apps_raw
,则routers
不起作用(即,如果您的routes.py文件包含unquote()
字典)。
注意,即使进行了上述更改,web2py附带的Rocket网络服务器仍然会自动request.raw_args
网址,因此您将获得args_match
中的特殊字符,但它们已经被解码
如果您使用基于参数的重写系统,则可以通过r'([\w@ -]|(?<=[\w@ -])[.=])*$'
键控制URL args中允许的字符,该键将正则表达式作为其值。默认正则表达式为{{1}},允许使用“@”,“ - ”,“=”和“。” (对'='和'。'有一些限制。)