This issue is not with response.flash but with request.args. The characters
allowed in args are fairly restrictive -- here are the regexes used:
http://code.google.com/p/web2py/source/browse/gluon/rewrite.py#51,
http://code.google.com/p/web2py/source/browse/gluon/rewrite.py#575.
In the LOAD() examples, try setting ajax=True and the flash should work.
Anthony
On Friday, August 3, 2012 6:23:53 PM UTC-4, mweissen wrote:
>
> I have tried:* response.flash="Auswählen"* (German for "select") and I
> got *"Ausw%C3%A4hlen"*. Looks like urllib.quote, but why?
> And in some other contexts I got "*Auswählen*" as expected. I could not
> find any rule.
>
> I am using the trunk from yesterday.
>
> Then I wrote some test functions. I have written the results after each
> block:
>
> def flash1():
> redirect (URL('flash1a', args=['hello there']))
>
> def flash1a():
> response.flash=request.args[0]
> return dict(text='done')
>
> Result: *hello_there* (with an underscore in place of the space)
> ------------------------------------------------------
>
> def flash2():
> redirect (URL('flash2a', args=['hello there äöü']))
>
> def flash2a():
> response.flash=request.args[0]
> return dict(text='done')
>
> Result: *Invalid request*. I thought "args" uses urllib.quote?
> ------------------------------------------------------
>
> def flash3():
> redirect (URL('flash3a', vars=dict(t='hello there äöü')))
>
> def flash3a():
> response.flash=request.vars['t']
> return dict(text='done')
>
> Result: *hello there äöü* ok!
> ------------------------------------------------------
>
> import urllib
>
> def flash4():
> response.flash='hello there äöü'
> return dict(text='done')
>
> Result: *hello there äöü* ok
> ------------------------------------------------------
>
> def flash4a():
> response.flash=urllib.quote('hello there äöü')
> return dict(text='done')
>
> Result: *hello%20there%20%C3%A4%C3%B6%C3%BC* ok
> ------------------------------------------------------
>
> def flash5():
> redirect (URL('flash5a', args=[urllib.quote('hello there äöü')]))
>
> def flash5a():
> response.flash=urllib.unquote(request.args[0])
> return dict(text='done')
>
> Result*: invalid request*
> ------------------------------------------------------
>
> def flash6():
> return dict(load=LOAD('default', 'flash6a.load'))
>
> def flash6a():
> response.flash='hello there äöü'
> return dict()
>
> Result: nothing!!
> ------------------------------------------------------
>
> def flash7():
> return dict(load=LOAD('default', 'flash7a.load', vars=dict(t='hello
> there äöü')))
>
> def flash7a():
> response.flash=request.vars['t']
> return dict()
>
> Result: nothing!
>
> Some strange results, isn't it?
>
> All functions again if someone wants to try it himself:
>
> def flash1():
> redirect (URL('flash1a', args=['hello there']))
>
> def flash1a():
> response.flash=request.args[0]
> return dict(text='done')
>
> def flash2():
> redirect (URL('flash2a', args=['hello there äöü']))
>
> def flash2a():
> response.flash=request.args[0]
> return dict(text='done')
>
> def flash3():
> redirect (URL('flash3a', vars=dict(t='hello there äöü')))
>
> def flash3a():
> response.flash=request.vars['t']
> return dict(text='done')
>
> def flash4():
> response.flash='hello there äöü'
> return dict(text='done')
>
> import urllib
>
> def flash4a():
> response.flash=urllib.quote('hello there äöü')
> return dict(text='done')
>
> def flash5():
> redirect (URL('flash5a', args=[urllib.quote('hello there äöü')]))
>
> def flash5a():
> response.flash=urllib.unquote(request.args[0])
> return dict(text='done')
>
> def flash6():
> return dict(load=LOAD('default', 'flash6a.load'))
>
> def flash6a():
> response.flash='hello there äöü'
> return dict()
>
> def flash7():
> return dict(load=LOAD('default', 'flash7a.load',
> vars=dict(flash='hello there äöü')))
>
> def flash7a():
> response.flash=request.vars.flash
> return dict()
>
> Any answers welcome!
> Regards, Martin
>
--