Gwt 浏览器将“+”字符替换为空格

Gwt 浏览器将“+”字符替换为空格,gwt,Gwt,我正在URL中传递一个attributesay,test=ae23+raj并检索它。我的URL是10.203.16.15:8080/page1?test=ae23+raj 我最初认为这与编码问题有关,并尝试了该选项。后来我注意到,在检索属性值之后,我在Window.alerttest中打印了该值。我得到ae23 raj作为价值 我需要这个值。这就是ae23+raj。我不知道有多少这样的特殊字符会被浏览器替换成其他字符。有人帮忙吗?提前感谢。对URL进行编码/解码。以下是您可以在客户端使用的JSN

我正在URL中传递一个attributesay,test=ae23+raj并检索它。我的URL是10.203.16.15:8080/page1?test=ae23+raj

我最初认为这与编码问题有关,并尝试了该选项。后来我注意到,在检索属性值之后,我在Window.alerttest中打印了该值。我得到ae23 raj作为价值


我需要这个值。这就是ae23+raj。我不知道有多少这样的特殊字符会被浏览器替换成其他字符。有人帮忙吗?提前感谢。

对URL进行编码/解码。以下是您可以在客户端使用的JSNI方法

public static final native String encodeUri(String uri) /*-{
    return encodeURI(uri);
}-*/;

public static final native String decodeUri(String uri) /*-{
    return decodeURI(uri);
}-*/;
%22ae23%2Braj%22是ae23+raj的编码值。在客户端进行解码以获得所需的值

在JavaScript中还有许多其他方法可以对URL进行编码/解码

了解

阅读有关在服务器端编码URL的详细信息

如何获取url查询参数

/** The query params. */
private static Map<String, String> queryParams = new HashMap<String, String>();

static {
    Map<String, List<String>> paramsMap = Window.Location.getParameterMap();
    for (String key : paramsMap.keySet()) {
        List<String> values = paramsMap.get(key);
        if (values.size() > 0) {
            String value = decodeUri(values.get(0));
            queryParams.put(key.toLowerCase(), value);
            queryParams.put(key, value);
        }
    }
}

在编码为application/x-www-form-urlencoded的查询字符串中,大多数人使用的是:&分隔的键值对,a=作为键值分隔符,a+是空间的编码值:

您必须使用%20作为空间


…或者您可以偏离事实上的标准,但是您必须自己解析查询字符串,因为所有工具HttpServlerRequestgetParameter和GWT的Window.LocationgetParameter(仅举几例)都会将+解码到一个空格中。

首先查看url编码,它不是一个属性,它叫做查询参数。双引号也是查询参数值的一部分吗?你好,谢谢你的回复。这个转义方法将给我一个编码URL。但我必须再次解析url以获取查询参数值。相反,我可以通过解析Window.Location.getQueryString来获取param值,对吗?请告诉我哪一个更好。感谢您在入门类中使用此代码,现在可以在应用程序中的任何位置使用此映射。注意:不要使用JSNI,而是使用请阅读。@Braj,W3Schools?他们有太多的谷歌果汁,因为它是一个相对较低的可靠性/准确性来源,其名称误导性地暗示了与W3C的关联,而他们没有。Mozilla的参考资料是一个更好的来源: