问题产生的北景:
某网站架设了一个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同步机制来实现...
有没有更好的办法解决?
还请达人赐教....
某网站架设了一个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同步机制来实现...
有没有更好的办法解决?
还请达人赐教....
encodeURIComponent 方法
将文本字符串编码为一个统一资源标识符 (URI) 的一个有效组件。encodeURIComponent(encodedURIString)必选的 encodedURIString 参数代表一个已编码的 URI 组件。encodeURI 方法
将文本字符串编码为一个有效的统一资源标识符 (URI)。encodeURI(URIString)必选的 URIString 参数代表一个已编码的 URI。
换句话说,用GBK编码的路径ftp可以打开,但是UTF-8编码的路径ftp绝对打不开,虽然编码的开形式都是%XX的样子,但实质是完全不同的两个东东.
下面是一个 URL 编码解码的 类..
http://groups.google.com/group/shawlqiu/web/Url.7z里面使用编码对照表实现 GB 码...
但要求客户端 flash player 在 8.0 以上。
也不爽
还是 GB/UNICODE 对照表好些
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>
ECMAScript标准应该是没有提供内置的实现了,毕竟ECMAScript本身内部采用Unicode编码,就是为了兼容多语言。兼容的意思就是都支持,至于多语言间怎么转化,显然就不是ECMAScript想要去关注的了。