浏览器用空格替换'+'字符

时间:2014-04-09 19:31:54

标签: gwt

我在URL中传递一个属性(例如,test =“ae23 + raj”)并检索它。我的网址是10.203.16.15:8080/page1?test="ae23+raj“

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

我需要这个值。那是“ae23 + raj”。我不知道有多少这样的特殊字符会被浏览器替换为其他字符。这里有什么帮助?提前谢谢。

2 个答案:

答案 0 :(得分:0)

对网址进行编码/解码。以下是您可以在客户端使用的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 Decoder/Encoder

详细了解HttpServletResponse#encodeURL()以对服务器端的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);
        }
    }
}

答案 1 :(得分:0)

在编码为application/x-www-form-urlencoded的查询字符串中(大多数人使用的内容:由&分隔的键值对,其中=作为键值分隔符),{{ 1}}是空格的编码值:http://www.w3.org/TR/html5/forms.html#url-encoded-form-data

您必须使用+作为空格。

...或者你可能偏离了事实上的标准,但是你必须自己解析你的查询字符串,就像所有工具(%20和GWT的HttpServlerRequest#getParameter一样,仅举几例)将Window.Location#getParameter解码为空格。