【问题标题】:Invalid hex encoding in query string查询字符串中的十六进制编码无效
【发布时间】:2022-11-10 05:08:57
【问题描述】:

我目前正在使用多个 query_params 进行 DJango 搜索,因为我使用 Sentry 我发现有时当您搜索具有百分比的内容时会触发问题:

“100% 天然” “100% 独特” “50% 等等等等”

Sentry:查询字符串中未处理的无效十六进制编码。

这是在 oauth 库中标记的

if INVALID_HEX_PATTERN.search(query):
        raise ValueError('Invalid hex encoding in query string.')

当前的搜索代码允许像这样传递任何 query_param:

re_path(r"^search/?$", search_system, name="search")

在视图内部我确实有这个:

query = request.query_params.get("query")
query = query.replace("%20", " ") if query else None

我试图将 %20 替换为一个空间,但有时它会发生,有时它不会,所以它随机发生,我不知道我是否做错了什么,或者实际上问题是:

is there anything i could do to avoid triggering this alert without doing anything in sentry? for example like cleaning up the data like a form

提前致谢。

为避免此问题,我尝试设置查询replace("%20", " "),我最好的猜测是当您将“百分比+空格”彼此相邻时触发错误,因此网址看起来像

search/100%25%20natural 在 python 中应该类似于“100% natural”,但正如我所说,有时它会触发,有时它不会。

【问题讨论】:

  • 您的数据似乎是 URL 编码的(对 URL 无效的字符被“转义”)也许 this other question 会有所帮助?

标签: python django search parameters


【解决方案1】:

有一个用于对您的数据进行 url 解码的功能。空间不是唯一可能的编码字符...

from urllib.parse import unquote

query = request.query_params.get("query")
query = unquote(query) if query else None

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2018-08-21
    • 2016-01-07
    • 2013-01-03
    • 1970-01-01
    相关资源
    最近更新 更多