【问题标题】:webView form posts spaces as "+" instead of "%20" Xamarin AndroidwebView 表单将空格发布为“+”而不是“%20”Xamarin Android
【发布时间】:2016-08-12 11:24:47
【问题描述】:

我正在关注覆盖 WebViewClient.ShouldOverrideUrlLoading 以拦截链接和帖子的混合应用程序示例。由于这不适用于 POST,因此我将 GET 用于表单。但是,表单控件值被编码并放入传递给 ShouldOverrideUrlLoading 的 URL,但编码使用“+”而不是“%20”,就像我的 ASP.NET Web 应用程序版本一样。我可以这样做:

url = url.Replace("+", " ");

但是,如果用户想要在编辑字段中添加“+”怎么办?是强迫他们使用“%43”和/或“+”之类的转义的唯一方法吗?这样我就需要做类似的事情:

url = url.Replace("+", " ");
url = url.Replace("%2543", "+");
url = url.Replace("%26%2343%3B", "+");

【问题讨论】:

    标签: android xamarin webview hybrid-mobile-app


    【解决方案1】:

    这似乎是 URL 编码表单字段的标准。

    根据Wikipedia

    当提交已输入 HTML 表单的数据时,表单字段名称和值将被编码并使用方法 GET 或 POST 或过去通过电子邮件发送到 HTTP 请求消息中的服务器。[2]默认使用的编码基于通用 URI 百分比编码规则的早期版本,[3] 进行了许多修改,例如换行规范化和用“+”而不是“%20”替换空格。以这种方式编码的 Internet 媒体数据类型是 application/x-www-form-urlencoded,目前在 HTML 和 XForms 规范中定义(仍然以非常过时的方式)。此外,CGI 规范还包含有关 Web 服务器如何解码此类数据并将其提供给应用程序的规则。

    因此,您必须对 URL 进行解编码才能使用它,并将加号适当地更改为空格。

    【讨论】:

    • 感谢您的调查。标准与否,它似乎不太理想。当然,对于 URL 来说更易于阅读,但对于发布的数据来说却很糟糕。我希望有一个选项或回调覆盖。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 2013-04-11
    相关资源
    最近更新 更多