[分享]客户端 使用 GBK 集进行 URI 编码

wcwtitxu 2010-03-19 03:08:09
在百度搜索时, 输入 "文字" 后点搜索, 可以看到 QueryString 中的 wd=%CE%C4%D7%D6

而在 JS 中使用 alert("wd=" + encodeURIComponent("文字")) 时, 看到的却是: wd=%E6%96%87%E5%AD%97


这是因为使用的编码集不一样. 前者用的是GB集, 后者是UTF-8


如何在客户端把 "文字" 编码成像百度搜索时那样的结果 "%CE%C4%D7%D6" 呢

我以前的做法一直是 IE下用VBScript, 非IE则将文本传给Flash, 由Flash完成编码

但 FlashPlayer 安装率再高, 也是....

(目前流行的较好的方法有: 在页面中,加入一个 Uncode->GBK 的映射表 也是比较稳妥的方法)


------------------------------------------------




今天忽然想到一个方法
在 Chrome, Opera, Firefox 各最新版本下测试, 发现居然成功.

但 IE 测试时,却又扫兴了一把. IE 下只好还用 VBS.



<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<script type="text/javascript">
function encodeURL(s) {
var img = document.createElement("img");
window.vbsval = "";
function escapeDBC(s) {
if (!s) return ""
if (window.ActiveXObject) return s.replace(/[\d\D]/g, function($0) {
execScript('window.vbsval=Hex(Asc("' + $0 + '"))', "vbscript");
return "%" + window.vbsval.slice(0,2) + "%" + window.vbsval.slice(-2);
});
img.src = "乱填?key=" + s;
return img.src.split("key=").pop();
}
return s.replace(/([^\x00-\xff]+)|([\x00-\xff]+)/g, function($0, $1, $2) {
return escapeDBC($1) + encodeURIComponent($2||'');
});
}

alert(encodeURL("文字"));
</script>




这个困扰的东东似乎就解决了...

现在剩下的问题是: 当操作系统不是简体中文, VBScript 中的 Asc 就取不到字符的 GBK 值了.

不理了, 如果网站有海外用户. 那也不建议用 GBK, 干嘛不用 UTF-8 呢..



...全文
180 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
okb3ay 2012-11-19
  • 打赏
  • 举报
回复
引用 5 楼 skyvu 的回复:
貌似很强大,之前还使用码表来完成的,http://download.csdn.net/source/2088712
果然有用 太强大了
sohighthesky 2010-04-08
  • 打赏
  • 举报
回复
晕,文件的格式要是ANSI才行,且charset="gbk"or gb2312
fengjinqing 2010-03-27
  • 打赏
  • 举报
回复
很好很实用
wcwtitxu 2010-03-26
  • 打赏
  • 举报
回复
空空,没人来



明天结掉
skyvu 2010-03-19
  • 打赏
  • 举报
回复
貌似很强大,之前还使用码表来完成的,http://download.csdn.net/source/2088712
ws_hgo 2010-03-19
  • 打赏
  • 举报
回复
谢谢分享
wcwtitxu 2010-03-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lieri111 的回复:]utf-8就是建立在GBK的基础上写出来的[/Quote]

这话不解
passself 2010-03-19
  • 打赏
  • 举报
回复
因为utf-8最终也是要变成那些形式来匹配的,utf-8就是建立在GBK的基础上写出来的
plzzz 2010-03-19
  • 打赏
  • 举报
回复
这个很难啊~~~~~~~~

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧