后来发现(2)中提供的只是中文字库,遇到日韩文字就不行了.
又找到一个在我现在机器的chrome31下可行的方法,于是决定
用(3)中的方法,当不行时,就用(2)中的结果:
(3)
var gbkIframe=document.createElement("iframe");
gbkIframe.src="about:blank";
gbkIframe.setAttribute("style","display:none;visibility:hidden;width:0
;height:0;scrolling:no;allowtransparency:true;frameborder:0;");
document.body.appendChild(gbkIframe);
var d=gbkIframe.contentWindow.document;
d.charset=d.characterSet="GBK";
alert(URLEncode("我そば"));
function URLEncode(s) {
if(null == gbkIframe || gbkIframe == 'undefined') {
return URLEncodeOld(s);
}
var ss = s.replace("'",'%27');
var d=gbkIframe.contentWindow.document;
d.charset=d.characterSet="GBK";
d.open();
d.write("<body><a href='?"+ss+"'>X</a></body>");
d.close();
var url=d.body.firstChild.href;
var ret=url.substr(url.lastIndexOf("?")+1);
var ret1=URLEncodeOld(s);
if(ret.length < ret1.length) {
return ret1;
}
return ret;
}
【 在 chwork (work) 的大作中提到: 】
: 标 题: Re: 问个js发get请求的编码问题
: 发信站: 水木社区 (Mon Dec 30 17:16:58 2013), 站内
:
: (1)
: 网上有人用form利用accept-charset设置成gbk
: 来submit,target设为新加的一个iframe
: action设为服务器端某个静态的html内容为:
: <script>
: parent._urlEncode_iframe_callback && parent._urlEncode_iframe_callback(loca
: tion.search.split('=')[1]);
: </script>
:
: 但这种方法需要在服务器端放一个html 如果这样我还不如
: 放一个php 在php里搞定gbk编码返回就是了
:
: 因为我是写chrome插件 所以暂时不想用到任何服务器端开发
:
:
: (2)
: 网上找到一个是定义了一个编码数组的:
:
: var gbData = [];
: setGbData();
: alert(URLEncodeOld("我"));
:
: function setGbData(){
: gbData = [ // 一个中文常量数组,内容太长贴小部分
: '啊阿埃...................'];
: }
:
: function URLEncodeOld(vStr) {
:
: var vGet = new String();
:
: for (var i = 0; i < vStr.length; i ++) {
:
: var tmp = vStr.charAt(i);
:
: var reg = /^[\u4e00-\u9fa5\uf900-\ufa2d]$/;
:
: if (reg.test(tmp)) {
:
: for (var area = 0; area < gbData.length; area ++) {
:
: var place = gbData[area].indexOf(tmp) + 1;
:
: if (place) {
:
: area += 16;
:
: vGet += '%' + getUCase((0xA0 + area).toString(16))
: ;
:
: vGet += '%' + getUCase((0xA0 + place).toString(16)
: );
:
: break;
:
: }
:
: }
:
: } else {
:
: var vPos ='~!@#$%^&*()-_+={}[]|\\:;"\'<>,.?/`'.indexOf(tmp)
: ;
:
: vGet += vPos != -1 ? '%' + getUCase(tmp.charCodeAt(0).toStr
: ing(16)) : tmp;
:
: }
:
: }
:
: return vGet.replace(/\s/g, '+');
:
: function getUCase(v) { return v.toUpperCase(); }
:
: }
:
:
: 【 在 Orpherus (奥路菲) 的大作中提到: 】
: : 扣一个utf-8 to gbk的编码转换库出来
:
:
: --
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 211.99.222.*]
--
FROM 211.99.222.*