--- decode.py 2008-10-02 09:17:45.000000000 +0200 +++ decode.new.py 2008-10-02 10:15:27.000000000 +0200 @@ -16,10 +16,13 @@ $Id: decode.py 70914 2006-10-25 19:30:03Z yuppie $ """ - +from zope import interface from zope.publisher.browser import isCGI_NAME from zope.i18n.interfaces import IUserPreferredCharsets +class IFixedUpRequest(interface.Interface): + pass + # taken and adapted from zope.publisher.browser.BrowserRequest def _decode(text, charsets): """Try to decode the text using one of the available charsets. @@ -33,22 +36,26 @@ return text def processInputs(request, charsets=None): - if charsets is None: - envadapter = IUserPreferredCharsets(request) - charsets = envadapter.getPreferredCharsets() or ['utf-8'] - - for name, value in request.form.items(): - if not (isCGI_NAME(name) or name.startswith('HTTP_')): - if isinstance(value, str): - request.form[name] = _decode(value, charsets) - elif isinstance(value, list): - request.form[name] = [ _decode(val, charsets) - for val in value - if isinstance(val, str) ] - elif isinstance(value, tuple): - request.form[name] = tuple([ _decode(val, charsets) - for val in value - if isinstance(val, str) ]) + + if not IFixedUpRequest.providedBy(request): + interface.alsoProvides(request, IFixedUpRequest) + + if charsets is None: + envadapter = IUserPreferredCharsets(request) + charsets = envadapter.getPreferredCharsets() or ['utf-8'] + + for name, value in request.form.items(): + if not (isCGI_NAME(name) or name.startswith('HTTP_')): + if isinstance(value, str): + request.form[name] = _decode(value, charsets) + elif isinstance(value, list): + request.form[name] = [ _decode(val, charsets) + for val in value + if isinstance(val, str) ] + elif isinstance(value, tuple): + request.form[name] = tuple([ _decode(val, charsets) + for val in value + if isinstance(val, str) ]) def setPageEncoding(request): """Set the encoding of the form page via the Content-Type header.