Java Internet Explorer不处理URL(GWT)中的html编码

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。无论出于何种

使用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。无论出于何种原因,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);
 }-*/;