Java Internet Explorer不处理URL(GWT)中的html编码
使用GWT,我得到了一个webapp,在某个页面上,它从URL中提取一个参数,该参数使用管道字符编码。例如,完整URL将处于开发模式:Java Internet Explorer不处理URL(GWT)中的html编码,java,gwt,encoding,utf-8,meta,Java,Gwt,Encoding,Utf 8,Meta,使用GWT,我得到了一个webapp,在某个页面上,它从URL中提取一个参数,该参数使用管道字符编码。例如,完整URL将处于开发模式: http://127.0.0.1:8888/Home.html?gwt.codesvr=127.0.0.1:9997#DynamicPromo:pk=3%257C1000 当我拉参数pk时,我应该得到3 | 1000.%257C是编码的pip字符 这在Firefox和Chrome中运行得很好 在IE中,我使用11,当我拉参数时得到3%7C1000。无论出于何种
http://127.0.0.1:8888/Home.html?gwt.codesvr=127.0.0.1:9997#DynamicPromo:pk=3%257C1000
当我拉参数pk时,我应该得到3 | 1000.%257C是编码的pip字符
这在Firefox和Chrome中运行得很好
在IE中,我使用11,当我拉参数时得到3%7C1000。无论出于何种原因,IE在编码字符中删除了25,这意味着它不再是管道字符,我的应用程序将中断
我四处阅读,发现编码问题在IE上很常见。特别是,我发现了以下页面:
建议的解决方案包括:
禁用Internet Explorer中的自动选择设置。
在HTTP头中提供字符集。
将META标记移动到解析数据的第一个千字节内
通过MSHTML。
我试过那3个,但都没用。以下是my Home.html的开头:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
其中URL来自包
getValue是通过以下方式设置的:
public static String encodePk(PrimaryKey pk)
{
if(pk != null)
{
return String.valueOf(pk.getPk()).concat("|").concat(String.valueOf(pk.getCpk()));
}
else{
return "";
}
}
最终结果是我在顶部发布的url:
http://127.0.0.1:8888/Home.html?gwt.codesvr=127.0.0.1:9997#DynamicPromo:pk=3%257C1000
其中pk=后面的部分是编码的字符串。尝试使用JavaScript encodeURIComponent函数对字符串进行编码。此函数使字符串可移植,因此它可以通过任何网络传输到任何支持ASCII字符的计算机
此函数用于对特殊字符进行编码
此外,它还编码以下字符:,/?:@&=+$
有关更多信息,请单击
以下是使用JSNI的示例代码:
public static final native String encodeURIComponent(String uri) /*-{
return encodeURIComponent(uri);
}-*/;
为了确保IE保持得体的编码,我必须在设置URL后首先对其进行解码:
public void setValue(String value)
{
this.value = unescape(value);
}
private static native String decodeURI( String s )
/*-{
return decodeURI(s);
}-*/;
非常感谢你的帮助 垂直条形管道的编码值为%7C。我不知道你是怎么得到%257C的管道字符的。有关@Braj的更多信息,我猜%25是%,因此|编码一次是%7C,编码两次是%257C。是的。25是百分号。如果这是问题所在,它在任何浏览器中都不起作用,事实并非如此。你是如何进行URL编码的?请分享示例代码。@Braj我更新了我的帖子,加入了它的编码方式。这是朝着正确方向迈出的一步!转义我的url时,它给了我3%25257C1000,我不知道为什么它要添加第二个25。
public void setValue(String value)
{
this.value = unescape(value);
}
private static native String decodeURI( String s )
/*-{
return decodeURI(s);
}-*/;