[导入]JavaScript 实现本地编码格式的 URLEncode

[导入]JavaScript 实现本地编码格式的 URLEncode
JavaScript 里有 escape, encodeURI 和 encodeURIComponent 函数
都可以对字串进行编码,它们之间的异同,在此就不说了.

本文是为了解决在 JavaScript 对文本进行本地编码格式的 URI 编码问题。
JS 本身使用的字符编码是 Unicode
escape 函数也是 Unicode 的
encodeURI 和 encodeURIComponent 则都是 UTF-8 的。

但我们有时则需要按本地编码格式对字符串进行 URI 编码。如:GB2312 的

如果是在 IE 可以借助 VBScript 的 Asc 函数。但是在非 IE 浏览器就不好办了。到底要怎么样才能够进行 GBK 的 URLEncode 呢?
之前看到一个方法就是在 JS 中加入一个 Unicode->GB2312 的映射表,也是一个办法,但是觉得加了几十K的东东,字符还不知道是不是很完整。

今天突然想到了用 Flash, 在 Flash 可以在 ActionScript 中通过 System.useCodepage = true 设置使用本地编码。然后利用 ExternalInterface 给 JS 曝个接口。JavaScript 调用 Flash 的函数来实现。

思路觉得还不错,于是就测试了一下。

在 Flash8 中新建个空白文档。在主场景里加了下面动作代码:
import flash.external.ExternalInterface; System.useCodepage = true; stop(); function encodeURL(str:String) { return (escape(str)); // ActionScript 的 escape 跟 JavaScript 的 escape 是不一样的. } ExternalInterface.addCallback("encodeURL", this, encodeURL);
然后建个 htm 测试下
<script type="text/javascript">//<![CDATA[ function thisMovie(movieName) { if (navigator.appName.indexOf("Microsoft") != -1) { return window[movieName]; } else { return document[movieName]; } } function mDo() { alert(thisMovie("encURI").encodeURL("中国人")); } //]]></script> <object id="encURI" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="0" height="0"> <param name="allowScriptAccess" value="sameDomain" /> <param name="movie" value="encodeURL.swf" /> <embed name="encURI" src="encodeURL.swf" width="0" height="0" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object> <input type="button" onclick="javascript:mDo()" value=" test ">

测试页面: http://www.ialvin.cn/util/py.htm
果然成功了!
觉得自己这个主意还是不错的。嘿嘿!
文章来源: http://www.ialvin.cn/blog/article.asp?id=152

你可能感兴趣的:([导入]JavaScript 实现本地编码格式的 URLEncode)