GET 多语言网站搜索

GET search in multilanguage site

我在我的 web2py 应用程序中包含了一个搜索表单,格式如下:

myapp/controller/search?query=myquery

但是,出于安全原因,web2py 会自动将空格和非字母数字字符替换为下划线,这对于纯英文网站是可以的,但是 使用重音符号的语言的障碍。例如,搜索“áéíóú”returns 五个下划线。

这可以通过在搜索表单中使用 POST 而不是 GET 来解决,但是用户将无法为结果添加书签。

有没有办法解决这个问题?

提前致谢。

这是我过去使用过的一个想法:

  1. 使用post提交查询
  2. 生成唯一字符串(例如 youtube:https://www.youtube.com/watch?v=jX3DuS2Ak3g
  3. 将查询与该字符串相关联并存储为 key/value 对 session/app state/db(取决于您希望它存在多长时间)
  4. 将用户重定向到那个

如果您不想占用额外的 memory/space,因为它们在某些情况下往往会增长很多,您可以将步骤 2-3 替换为将字符串加密为您可以在之后解密的内容。您可以在中间件中执行此操作 class,这样它对您的应用逻辑是透明的。

这是人们在处理 URL 时遇到的普遍问题。 您可以使用 urllib 中的 quote/quote_plus 模块来规范化字符串 -

例如,根据您建议的字符串 -

>>> print  urllib.quote('éíóú')
%C3%A9%C3%AD%C3%B3%C3%BA
>>> print  urllib.unquote('%C3%A9%C3%AD%C3%B3%C3%BA')
éíóú

当您在后端从请求中检索它时,您将必须执行取消引用。

还有一些其他帖子可能会有帮助 - urlencode implementation and unicode ready urls