问题产生的北景:
    某网站架设了一个FTP服务器(用的是Server-U),主要用于资源共享.网站页面全部采用静态HTML页面,页面中需要下载的地方都用的是类似[ftp://username:password@serverip:serverport/中文路径...]的路径,但是ftp默认用GBK进行编码,而且编码时仅对汉非ASCII字符进行编码,如果在超链接中直接用汉字的话IE6可以正常打开,但是IE7却无法打开.(所有的静态页面都采用GB2312字符集)
    分析后,经多次测试后得出结论:ie6可以将中文FTP路径转换为GBK编码,因而可以正常访问,但ie7却没有,所以ie7无法打开ftp中文路径.
解决方法:
    在页面中判断ie版本,如果是ie6直接将超链接地址写为中文路径(因为后来测试还发现,如果都用GBK编码,ie7可以打开而且是ie6又打不开了),如果是ie7则对非ASCII字符进行GBK编码.
    这样的想法已经在jsp页面中得到了实现,而且此法可行.
    jsp页面中解决时使用了java.net.URLEncoder.encode(路径,"GBK");而静态页面中却无法调用java类库,故想请教一下高人,如何用javascript实现类似java.net.URLEncoder.encode("","GBK")的功能,或者说能不能在javascript中调用java.net.URLEncoder.encode("","GBK");
对已有解决方法的一些说明:
    网上搜了一下,有这样几种解决办法
    1.javascript中定义一个GBK映射,经过查表来实现编码.这种方法也不失为一种解决办法,但是网上这些字符映射表如何得来,网上看到的都是没有格式的,没法使用.
    2.用ajax实现,但这种方法也不太好,页面中的超链接地址需要javascrip处理,调用ajax后需要继续往下执行,也想到了用ajax同步机制来实现...
有没有更好的办法解决?
还请达人赐教....

解决方案 »

  1.   

    JS函数:
    encodeURIComponent 方法
    将文本字符串编码为一个统一资源标识符 (URI) 的一个有效组件。encodeURIComponent(encodedURIString)必选的 encodedURIString 参数代表一个已编码的 URI 组件。encodeURI 方法
    将文本字符串编码为一个有效的统一资源标识符 (URI)。encodeURI(URIString)必选的 URIString 参数代表一个已编码的 URI。
      

  2.   

    谢谢楼上的兄弟,我的问题是GBK编码,上面所说的几个方法都是用UTF-8编码的,而且GBK编码和UTF-8编码结果是不一样的.
    换句话说,用GBK编码的路径ftp可以打开,但是UTF-8编码的路径ftp绝对打不开,虽然编码的开形式都是%XX的样子,但实质是完全不同的两个东东.
      

  3.   


    下面是一个 URL 编码解码的 类..
    http://groups.google.com/group/shawlqiu/web/Url.7z里面使用编码对照表实现 GB 码...
      

  4.   

    function IEncodeURIGb(sStr, CP936)方法的俩参数代表什么意思
      

  5.   

    可以用 flash 来编。
    但要求客户端 flash player 在 8.0 以上。
    也不爽
    还是 GB/UNICODE 对照表好些
      

  6.   

    <script>
    var asfman = {};
    asfman.urlEncode = function(str)
    {
    window.execScript("Function vbsFun(str):vbsFun=hex(asc(str)):End Function","vbscript");
    var gObject={};
    return str.replace(/[\x00-\xff]/g,function(a)
    {
    return a.replace(/[^0-9a-zA-Z]/g,function(b){
    if(!gObject[b])
    gObject[b]="%"+vbsFun(b);
    return gObject[b];
    })
    }).replace(/[^\x00-\xff]/g,function(c){
    return c.replace(/./g,function(d)
    {
    if(!gObject[d])
    gObject[d]= vbsFun(d).replace(/(..)(..)/,"%$1%$2");
    return gObject[d];
    })
    }).replace(/%20/g,"+")
    };
    alert(asfman.urlEncode("运营分析系统"));
    </script>
      

  7.   

    这个只能在IE里面运行。还是调了那么非主流的“vbscript”。我非常想知道用javascript怎么实现
      

  8.   

    http://shawlqiu.googlegroups.com/web/Url.7z这里有一个demo。不过仍然是通过码表的方式来实现的。
    ECMAScript标准应该是没有提供内置的实现了,毕竟ECMAScript本身内部采用Unicode编码,就是为了兼容多语言。兼容的意思就是都支持,至于多语言间怎么转化,显然就不是ECMAScript想要去关注的了。