文档章节

jquery.base64.js支持中文

 夏碌冬藏
发布于 2017/04/28 21:51
字数 1094
阅读 42
收藏 0
点赞 0
评论 0

@阿阮 在https://my.oschina.net/aruan/blog/418980写道支持中文,但是缺少了东西“"use strict";”在测试时,发现有很多关于jquery.base64.js的库,最后发现@阿阮 兄是从https://github.com/carlo/jquery-base64这里修改来的,现在放出可用的源码。

    使用方法:

<html>

<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script language="javascript" src="js/jquery-1.11.3.min.js"></script>
    <script language="javascript" src="js/jquery.base64.cn.js"></script>
</head>

<body>
    <input id="path" name="path" type="hidden" value="haha"></input>
    <input id="putcardno01" name="putcardno01" type="text" size="65" value=""></input>
    <br>
    <input onclick="subfunc();" class="btn1" value="提交加密" type="button"></input>
    <br> 加密后:
    <input id="putcardno02" name="putcardno02" type="text" size="65" value=""></input>
    <br>
    <input onclick="subfunc02();" class="btn1" value="提交解密" type="button"></input>
    <br>
    <br>
    <hr>
    <input onclick="subfunc03();" class="btn1" value="提交N次加密" type="button"></input>
    <br> 加密后:
    <input id="putcardno03" name="putcardno03" type="text" size="65" value=""></input>
    <br>
    <input onclick="subfunc04();" class="btn1" value="提交N次解密" type="button"></input>
    <br>
    <br>
    <input onclick="clearrr();" class="btn1" value="清除" type="button"></input>
    <br>
    <textarea id='txt' cols="75" rows="19"></textarea>
</body>
<script language="javascript">
var path = document.getElementById("path").value;

function app(info) {
    $("#txt").val($("#txt").val() + '\n' + info);
}



function subfunc() {
    var put1 = $.trim($("#putcardno01").val());
    // var estxt=$.base64.encode(put1);
    //var estxt=$.base64.btoa(put1);

    var estxt = encodeBase64(put1);
    $("#putcardno02").val(estxt);
    app("加密后[" + estxt + "]");
}



function subfunc02() {
    var put1 = $.trim($("#putcardno02").val());
    //var estxt=$.base64.decode(put1);
    //var estxt=$.base64.atob(put1);

    var estxt = decodeBase64(put1);
    app("解密后[" + estxt + "]");
}


//////////////////////////////////////////
var numTimes = 5;

function subfunc03() {
    var put1 = $.trim($("#putcardno01").val());
    // var estxt=$.base64.encode(put1);
    //var estxt=$.base64.btoa(put1);
    //estxt=$.base64.btoa(estxt);

    estxt = encodeBase64(put1, numTimes);

    $("#putcardno03").val(estxt);
    app(numTimes + "次加密后[" + estxt + "]");
}



function subfunc04() {
    var put1 = $.trim($("#putcardno03").val());
    //var estxt=$.base64.decode(put1);
    //var estxt=$.base64.atob(put1);
    //estxt=$.base64.atob(estxt);


    estxt = decodeBase64(put1, numTimes);
    app(numTimes + "次解密后[" + estxt + "]");
}


function clearrr() {
    $("#putcardno02").val("");
    $("#putcardno03").val("");
    $("#putcardno04").val("");
    $("#txt").val("");
}













//加密方法。没有过滤首尾空格,即没有trim.
//加密可以加密N次,对应解密N次就可以获取明文
function encodeBase64(mingwen, times) {
    var code = "";
    var num = 1;
    if (typeof times == 'undefined' || times == null || times == "") {
        num = 1;
    } else {
        var vt = times + "";
        num = parseInt(vt);
    }

    if (typeof mingwen == 'undefined' || mingwen == null || mingwen == "") {

    } else {
        code = mingwen;
        for (var i = 0; i < num; i++) {
            code = $.base64.encode(code);
            // code = $.base64({data:code,type:0});
        }
    }
    return code;
}


//解密方法。没有过滤首尾空格,即没有trim
//加密可以加密N次,对应解密N次就可以获取明文
function decodeBase64(mi, times) {
    var mingwen = "";
    var num = 1;
    if (typeof times == 'undefined' || times == null || times == "") {
        num = 1;
    } else {
        var vt = times + "";
        num = parseInt(vt);
    }


    if (typeof mi == 'undefined' || mi == null || mi == "") {

    } else {
        mingwen = mi;
        for (var i = 0; i < num; i++) {
            mingwen = $.base64.decode(mingwen);
            // mingwen = $.base64({data:mingwen,type:1,unicode:false});
        }
    }
    return mingwen;
}


/*
测试
输入 suolong2014version


加密后[c3VvbG9uZzIwMTR2ZXJzaW9u]
解密后[suolong2014version]
5次加密后[VjFod1QxWXlVblJUYTJoUVYwWmFhRnBYZEhOTk1WSlhWV3hPVG1KSVFscFZNalYzWVVaYU5tSkVSVDA9]
5次解密后[suolong2014version]
*/
</script>

    源码:

//支持中文的jquery.base64.js插件
"use strict";
jQuery.base64 = (function($) {

    var _PADCHAR = "=",
        _ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
        _VERSION = "1.1"; //Mr. Ruan fix to 1.1 to support asian char(utf8)


    function _getbyte64(s, i) {
        // This is oddly fast, except on Chrome/V8.
        // Minimal or no improvement in performance by using a
        // object with properties mapping chars to value (eg. 'A': 0)

        var idx = _ALPHA.indexOf(s.charAt(i));

        if (idx === -1) {
            throw "Cannot decode base64";
        }

        return idx;
    }

    function _decode_chars(y, x) {
        while (y.length > 0) {
            var ch = y[0];
            if (ch < 0x80) {
                y.shift();
                x.push(String.fromCharCode(ch));
            } else if ((ch & 0x80) == 0xc0) {
                if (y.length < 2) break;
                ch = y.shift();
                var ch1 = y.shift();
                x.push(String.fromCharCode(((ch & 0x1f) << 6) + (ch1 & 0x3f)));
            } else {
                if (y.length < 3) break;
                ch = y.shift();
                var ch1 = y.shift();
                var ch2 = y.shift();
                x.push(String.fromCharCode(((ch & 0x0f) << 12) + ((ch1 & 0x3f) << 6) + (ch2 & 0x3f)));
            }
        }
    }

    function _decode(s) {
        var pads = 0,
            i,
            b10,
            imax = s.length,
            x = [],
            y = [];

        s = String(s);

        if (imax === 0) {
            return s;
        }

        if (imax % 4 !== 0) {
            throw "Cannot decode base64";
        }

        if (s.charAt(imax - 1) === _PADCHAR) {
            pads = 1;

            if (s.charAt(imax - 2) === _PADCHAR) {
                pads = 2;
            }

            // either way, we want to ignore this last block
            imax -= 4;
        }

        for (i = 0; i < imax; i += 4) {
            var ch1 = _getbyte64(s, i);
            var ch2 = _getbyte64(s, i + 1);
            var ch3 = _getbyte64(s, i + 2);
            var ch4 = _getbyte64(s, i + 3);

            b10 = (_getbyte64(s, i) << 18) | (_getbyte64(s, i + 1) << 12) | (_getbyte64(s, i + 2) << 6) | _getbyte64(s, i + 3);
            y.push(b10 >> 16);
            y.push((b10 >> 8) & 0xff);
            y.push(b10 & 0xff);
            _decode_chars(y, x);
        }
        switch (pads) {
            case 1:
                b10 = (_getbyte64(s, i) << 18) | (_getbyte64(s, i + 1) << 12) | (_getbyte64(s, i + 2) << 6);
                y.push(b10 >> 16);
                y.push((b10 >> 8) & 0xff);
                break;

            case 2:
                b10 = (_getbyte64(s, i) << 18) | (_getbyte64(s, i + 1) << 12);
                y.push(b10 >> 16);
                break;
        }
        _decode_chars(y, x);
        if (y.length > 0) throw "Cannot decode base64";
        return x.join("");
    }


    function _get_chars(ch, y) {
        if (ch < 0x80) y.push(ch);
        else if (ch < 0x800) {
            y.push(0xc0 + ((ch >> 6) & 0x1f));
            y.push(0x80 + (ch & 0x3f));
        } else {
            y.push(0xe0 + ((ch >> 12) & 0xf));
            y.push(0x80 + ((ch >> 6) & 0x3f));
            y.push(0x80 + (ch & 0x3f));
        }
    }



    function _encode(s) {
        if (arguments.length !== 1) {
            throw "SyntaxError: exactly one argument required";
        }

        s = String(s);
        if (s.length === 0) {
            return s;
        }

        //s = _encode_utf8(s);
        var i,
            b10,
            y = [],
            x = [],
            len = s.length;
        i = 0;
        while (i < len) {
            _get_chars(s.charCodeAt(i), y);
            while (y.length >= 3) {
                var ch1 = y.shift();
                var ch2 = y.shift();
                var ch3 = y.shift();
                b10 = (ch1 << 16) | (ch2 << 8) | ch3;
                x.push(_ALPHA.charAt(b10 >> 18));
                x.push(_ALPHA.charAt((b10 >> 12) & 0x3F));
                x.push(_ALPHA.charAt((b10 >> 6) & 0x3f));
                x.push(_ALPHA.charAt(b10 & 0x3f));
            }
            i++;
        }


        switch (y.length) {
            case 1:
                var ch = y.shift();
                b10 = ch << 16;
                x.push(_ALPHA.charAt(b10 >> 18) + _ALPHA.charAt((b10 >> 12) & 0x3F) + _PADCHAR + _PADCHAR);
                break;

            case 2:
                var ch1 = y.shift();
                var ch2 = y.shift();
                b10 = (ch1 << 16) | (ch2 << 8);
                x.push(_ALPHA.charAt(b10 >> 18) + _ALPHA.charAt((b10 >> 12) & 0x3F) + _ALPHA.charAt((b10 >> 6) & 0x3f) + _PADCHAR);
                break;
        }

        return x.join("");
    }


    return {
        decode: _decode,
        encode: _encode,
        VERSION: _VERSION
    };
}(jQuery));

 

 

© 著作权归作者所有

共有 人打赏支持
粉丝 8
博文 45
码字总数 11945
作品 0
赣州
后端工程师
jquery.base64.js的修正

深圳一朋友说使用jquery.base64.js时发现对于中文直接抛出异常,作者压根不处理汉字的情况,因此 对其进行修正,关键函数为: function decodechars(y, x){ while(y.length > 0){ var ch = ...

阿阮 ⋅ 2015/05/23 ⋅ 8

Collabtive 0.76 中文修复版首发下载

Collabtive 0.76 中文修复版,修复4个问题: install.php里的SQL语句创建表不支持中文,数据库记录显示中文乱码; 项目文件管理的中文汉化、语言配置文件遗留问题; 不支持创建中文目录和上传...

庞罗均 ⋅ 2012/07/03 ⋅ 0

Google 云输入法登陆 Google Translate

去年年底 Google Transliterate 开始支持简体中文,今年三月其 API 再次更新,支持了使用 Bookmarklet 在任何网页中使用谷歌云输入法输入中文。而今天,谷歌输入法团队将中文的云输入法引入了...

老枪 ⋅ 2011/05/19 ⋅ 7

Hyperic HQ简体中文汉化包完整版

Hyperic HQ简体中文汉化包完整版: 区别于Hyperic HQ 中文汉化包基础版,Hyepric HQ 中文汉化包完整版的特性包括: 全面的 ApplicationResource.properties汉化 全部的 JSP汉化 Hyperic HQ 中...

liuyifeng ⋅ 2011/03/16 ⋅ 3

谷歌翻译开始支持中文发音

谷歌翻译(Google Translate)尽管很早就支持了中文语言,而且也有了翻译结果发音功能,但是一直没有中文的发音支持,不得不说是一个遗憾。而如今谷歌的这个缺陷也 终于得到了弥补。目前根据...

红薯 ⋅ 2010/05/12 ⋅ 3

Nginx中文域名配置

Nginx虚拟主机上绑定一个带中文域名,比如linuxeye.中国,浏览器不能跳转。 why? 因为操作系统的核心都是英文组成,DNS服务器的解析也是由英文代码交换,所以DNS服务器上并不支持直接的中文域...

袁梓皓 ⋅ 2016/03/09 ⋅ 0

secureCRT遇到过的问题

中文输入乱码成问号 定制securtCRT主题时, 莫名其妙的中文输入全部变成了问号字符。 网上所有解决方案无效, 绝不可能是网上说的linux系统默认编码设置问题, securtCRT也已经设置为UTF8编码...

麦拂沙 ⋅ 2015/09/21 ⋅ 0

Asian Word Count

Asian Word Count是一款Wordpress中文字数插件。目前绝大部分字数统计插件均不支持中文(确切来说,我还没有找到支持中文的插件),所以我基于WP Word Count修改制作了这款支持中文、韩文、日...

匿名 ⋅ 2012/04/23 ⋅ 0

电子排版系统--CTEX

CTeX 中文套装是基于 Windows 下的 MiKTeX 系统,集成了编辑器 WinEdt 和 PostScript 处理软件 Ghostscript 和 GSview 等主要工具。 CTeX 中文套装在 MiKTeX 的基础上增加了对中文的完整支持...

匿名 ⋅ 2009/05/08 ⋅ 0

msysGit的中文支持

之前有发了篇引子文章《git学习笔记—web前端开发七武器》,简单的介绍了下git,本来想按传统的方式一步步介绍git,转念一下,其实意义不大,网上已经有完整的git的教程,比如《Git Communi...

i33 ⋅ 2012/03/20 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Python爬虫,抓取淘宝商品评论内容

作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿“德州扒鸡”...

python玩家 ⋅ 18分钟前 ⋅ 0

MySQL 内核深度优化

MYSQL数据库适用场景广泛,相较于Oracle、DB2性价比更高,Web网站、日志系统、数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务...

java高级架构牛人 ⋅ 40分钟前 ⋅ 0

用户登录信息-钉子效果(基于jquery2.0)

本js效果使用jquery2.0,清晰的分解用户登录信息的(钉子效果),该效果直接用在作者网站(www.phpkhbd.com)上。 里面的难点有:定时器,延时。 大致效果如下: 一开始: 鼠标放上去的时候:...

宁哥实战课堂 ⋅ 42分钟前 ⋅ 0

解决yum安装报错Protected multilib versions

使用yum安装报错Protected multilib versions原因是因为多个库不能共存,不过更新的话也并不行,但是可以在安装命令后面加上如下一段命令: --setopt=protected_multilib=false 案例: 比如需...

北岩 ⋅ 53分钟前 ⋅ 0

为什么要学习Typescript???

简单来说 目前的typescript就是未来的javascript 为什么?? 这要从ECMA-262标准的第4版说起 对了 我们说的ES5 其实是ECMAScript3.1这个替代性建议被扶正了而已... 那么 第4版标准是什么? 看看...

hang1989 ⋅ 57分钟前 ⋅ 0

linux安装ipfs

一、下载ipfs # cd /usr/local/ipfs/ # wget https://dist.ipfs.io/go-ipfs/v0.4.15/go-ipfs_v0.4.15_linux-amd64.tar.gz # tar -zxvf go-ipfs_v0.4.15_linux-amd64.tar.gz 二、安装ipfs # ......

八戒八戒八戒 ⋅ 今天 ⋅ 0

jvm程序执行慢诊断手册

生产环境最多的几种事故之一就是程序执行慢,如果是web服务的话,表现就是响应时间长。本文分享,从业多年形成的排查守则。 诊断步骤 系统资源查看 首先是系统资源查看,而且必须是在第一步。...

xpbob ⋅ 今天 ⋅ 0

YII2 advanced 高级版本项目搭建-添加API应用以及多应用

一、YII安裝 安裝yii可以用composer安裝,也可以在yii中文社区下载归档文件安装 composer安装就不介绍了,因为要安装composer,比较麻烦,当然安装了composer是最好的,以后安装yii的插件要用...

botkenni ⋅ 今天 ⋅ 0

在jdk1.8的环境下模拟永久代内存溢出

相信不少小伙伴在看深入理解Java虚拟机的时候,作者给我们举例一个demo来发生PermGen space 1、通过List不断添加String.intern(); 2、通过设置对应的-XX:PermSize与-XX:MaxPermSize(更快看到...

虾几把写 ⋅ 今天 ⋅ 0

开发OpenDaylight组件的完整流程

在前面介绍学习了OpenDaylight的几个重要模块后,这里再来介绍下完整开发一个模块的过程。 OSGI的bundles提供被其他OSGI组件调用的服务。这个教程中展示的是Data Packet Service去解析数据包...

wangxuwei ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部