imyelo / inCharset

不同编码间urlEncode的前端解决方案。 utf8->gbk, gbk->utf8, *->*.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

inCharset

inCharset解决了前端中不同编码的传递问题,也就是对字符串进行不同编码的urlencode。典型的案例如:在一个utf8编码的网页中,发送请求到另一个只接受gbk编码的接口。

代码的原始拷贝和思路来自zciii

Build Status Built with Grunt Codeship

后端?

inCharset的实现借助了一个iframe以及一个html页面,因此并不适用于后端JS。如果你需要在Node.js中进行GBK的解码,除了使用iconv-lite,也不妨参考bound0的解决方案

使用

inCharset可以在requirejs或seajs下使用,即require('inCharset')
其他情况,则会将inCharset暴露到全局(window)中去,即window.inCharset

options

在使用inCharset前,可以通过require('inCharset').options(opts)对其进行部分设置。

optionns.action

默认值为'./getEncodeStr.html'。请务必将该值设置为getEncodeStr.html在当前网页的相对路径(或绝对路径)。

options.namespace

默认值为'_inCharset'。inCharset的实现需要借助于全局变量,而这些全局变量都将存放在window[options.namespace]下,从而尽可能地保护其他全局变量。

options.iframeName

默认值为'urlEncode_iframe'。inCharset的实现需要借助一个iframe,而这个iframe的name值将以该参数作为前缀命名,请确保该值的唯一性。

options.timeout

默认值为10000, 单位毫秒。假定超过该时长仍未得到响应,则会调用失败的回调函数,并传入错误信息为'timeout'

get

inCharset.get带有四个参数,依次为需要转码的字符串(必须)、目标转码类型(必须)、成功回调函数、失败回调函数。 具体可参考演示

abort

inCharset.get返回的对象中包含一个abort方法,该方法借鉴了jQuery.ajax的设计,通过它可以中断对应的inCharset.get请求。你也可以向abort方法的第一个参数传入自定义的错误信息,否则默认的错误信息将为'abort'。。

演示

对字符进行不同编码的urlencode。

inCharset.get('中文', 'utf8', function (str) {
  console.log(str === '%E4%B8%AD%E6%96%87');
});
inCharset.get('中文', 'gbk', function (str) {
  console.log(str === '%D6%D0%CE%C4');
});
inCharset.get('中文', 'big5', function (str) {
  console.log(str === '%A4%A4%A4%E5');
});

设置getEncodeStr.html的地址

inCharset.options({action: '../../libs/getEncodeStr.html'});
inCharset.get('中文', 'gbk', function (str) {
  console.log(str === '%D6%D0%CE%C4');
});

设置超时限制时长

inCharset.options({timeout: 5000});
inCharset.get('中', 'gbk', function (str) {
  console.log(str === '%D6%D0');
});

处理异常

var onSuccess = function (str) {
  console.log(str === '%D6%D0');
};
var onError = function (err) {
  console.error(err);
};
inCharset.get('中', 'gbk', onSuccess, onError);

中断未完成的inCharset.get请求

var onSuccess = function (str) {
  console.log(str === '%D6%D0');
};
var onError = function (err) {
  console.error(err);
};
var request = inCharset.get('中', 'gbk', onSuccess, onError);
request.abort();
// or request.abort('the message you want it be');

测试

由于inCharset会借助DOM元素实现其业务,所以建议直接使用浏览器打开/test目录下的Mocha测试页面进行测试。
当然你也可以选择使用grunt test跳过浏览器测试。

如果在浏览器下测试,注意需要首先执行grunt copy:test将case同步到不同的方案底下。

License

MIT

Bitdeli Badge

About

不同编码间urlEncode的前端解决方案。 utf8->gbk, gbk->utf8, *->*.

License:MIT License


Languages

Language:JavaScript 99.1%Language:CSS 0.9%