我在URL中传递一个属性(例如,test =“ae23 + raj”)并检索它。我的网址是10.203.16.15:8080/page1?test="ae23+raj“
我最初认为这与编码问题有关,并尝试了该选项。后来我注意到在检索属性值后,我在Window.alert(test)中打印了该值。我得到“ae23 raj”作为价值。
我需要这个值。那是“ae23 + raj”。我不知道有多少这样的特殊字符会被浏览器替换为其他字符。这里有什么帮助?提前谢谢。
答案 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进行编码/解码。
了解
详细了解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
解码为空格。