免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6984 | 回复: 7
打印 上一主题 下一主题

[分享]PHP与JavaScript之间中文base64码转换代码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-20 14:17 |只看该作者 |倒序浏览

  1. PHP base64_encode

  2. <?php
  3. function str_encode($str){
  4.         return base64_encode(iconv('GB18030','UTF-8',$str));
  5. }
  6. echo str_encode('你好!美女!');
  7. ?>
复制代码


JavaScript  base64_decode


  1. <script language='javascript'>
  2. /* utf.js - UTF-8 <=> UTF-16 convertion
  3. *
  4. * Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp>
  5. * Version: 1.0
  6. * LastModified: Dec 25 1999
  7. * This library is free.  You can redistribute it and/or modify it.
  8. */

  9. /*
  10. * Interfaces:
  11. * utf8 = utf16to8(utf16);
  12. * utf16 = utf16to8(utf8);
  13. */

  14. function utf16to8(str) {
  15.     var out, i, len, c;

  16.     out = "";
  17.     len = str.length;
  18.     for(i = 0; i < len; i++) {
  19.         c = str.charCodeAt(i);
  20.         if ((c >= 0x0001) && (c <= 0x007F)) {
  21.             out += str.charAt(i);
  22.         } else if (c > 0x07FF) {
  23.             out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
  24.             out += String.fromCharCode(0x80 | ((c >>  6) & 0x3F));
  25.             out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));
  26.         } else {
  27.             out += String.fromCharCode(0xC0 | ((c >>  6) & 0x1F));
  28.             out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));
  29.         }
  30.     }
  31.     return out;
  32. }

  33. function utf8to16(str) {
  34.     var out, i, len, c;
  35.     var char2, char3;

  36.     out = "";
  37.     len = str.length;
  38.     i = 0;
  39.     while(i < len) {
  40.         c = str.charCodeAt(i++);
  41.         switch(c >> 4)
  42.         {
  43.           case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
  44.             // 0xxxxxxx
  45.             out += str.charAt(i-1);
  46.             break;
  47.           case 12: case 13:
  48.             // 110x xxxx   10xx xxxx
  49.             char2 = str.charCodeAt(i++);
  50.             out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
  51.             break;
  52.           case 14:
  53.             // 1110 xxxx  10xx xxxx  10xx xxxx
  54.             char2 = str.charCodeAt(i++);
  55.             char3 = str.charCodeAt(i++);
  56.             out += String.fromCharCode(((c & 0x0F) << 12) |
  57.                                            ((char2 & 0x3F) << 6) |
  58.                                            ((char3 & 0x3F) << 0));
  59.             break;
  60.         }
  61.     }

  62.     return out;
  63. }

  64. /* Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp>
  65. * Version: 1.0
  66. * LastModified: Dec 25 1999
  67. * This library is free.  You can redistribute it and/or modify it.
  68. */

  69. /*
  70. * Interfaces:
  71. * b64 = base64encode(data);
  72. * data = base64decode(b64);
  73. */


  74. var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  75. var base64DecodeChars = new Array(
  76.     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  77.     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  78.     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
  79.     52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
  80.     -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
  81.     15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
  82.     -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
  83.     41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);

  84. function base64encode(str) {
  85.     var out, i, len;
  86.     var c1, c2, c3;

  87.     len = str.length;
  88.     i = 0;
  89.     out = "";
  90.     while(i < len) {
  91.         c1 = str.charCodeAt(i++) & 0xff;
  92.         if(i == len)
  93.         {
  94.             out += base64EncodeChars.charAt(c1 >> 2);
  95.             out += base64EncodeChars.charAt((c1 & 0x3) << 4);
  96.             out += "==";
  97.             break;
  98.         }
  99.         c2 = str.charCodeAt(i++);
  100.         if(i == len)
  101.         {
  102.             out += base64EncodeChars.charAt(c1 >> 2);
  103.             out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
  104.             out += base64EncodeChars.charAt((c2 & 0xF) << 2);
  105.             out += "=";
  106.             break;
  107.         }
  108.         c3 = str.charCodeAt(i++);
  109.         out += base64EncodeChars.charAt(c1 >> 2);
  110.         out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
  111.         out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
  112.         out += base64EncodeChars.charAt(c3 & 0x3F);
  113.     }
  114.     return out;
  115. }

  116. function base64decode(str) {
  117.     var c1, c2, c3, c4;
  118.     var i, len, out;

  119.     len = str.length;
  120.     i = 0;
  121.     out = "";
  122.     while(i < len) {
  123.         /* c1 */
  124.         do {
  125.             c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
  126.         } while(i < len && c1 == -1);
  127.         if(c1 == -1)
  128.             break;

  129.         /* c2 */
  130.         do {
  131.             c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
  132.         } while(i < len && c2 == -1);
  133.         if(c2 == -1)
  134.             break;

  135.         out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));

  136.         /* c3 */
  137.         do {
  138.             c3 = str.charCodeAt(i++) & 0xff;
  139.             if(c3 == 61)
  140.                 return out;
  141.             c3 = base64DecodeChars[c3];
  142.         } while(i < len && c3 == -1);
  143.         if(c3 == -1)
  144.             break;

  145.         out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));

  146.         /* c4 */
  147.         do {
  148.             c4 = str.charCodeAt(i++) & 0xff;
  149.             if(c4 == 61)
  150.                 return out;
  151.             c4 = base64DecodeChars[c4];
  152.         } while(i < len && c4 == -1);
  153.         if(c4 == -1)
  154.             break;
  155.         out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
  156.     }
  157.     return out;
  158. }
  159. //input base64 encode
  160. function strdecode(str){
  161.         return utf8to16(base64decode(str));
  162. }
  163. document.write(strdecode('5L2g5aW9Iee+juWlsyE='));
  164. </script>

复制代码

论坛徽章:
0
2 [报告]
发表于 2006-03-21 07:47 |只看该作者
这东西居然没人要。。。呵呵

论坛徽章:
0
3 [报告]
发表于 2006-03-21 09:05 |只看该作者
顶一把

论坛徽章:
0
4 [报告]
发表于 2006-03-21 14:22 |只看该作者
我在很多地方看到的的代码都不是很好,还好这帮日本人解决了这个问题。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2006-03-21 14:53 |只看该作者
这个话题应该算js的方面,我转过去

论坛徽章:
0
6 [报告]
发表于 2007-08-06 17:09 |只看该作者
好东西,顶一顶。

论坛徽章:
0
7 [报告]
发表于 2007-08-06 22:43 |只看该作者
已经有了,嘿嘿~~~~~~~js版的base64

论坛徽章:
3
金牛座
日期:2013-10-12 15:42:452015年辞旧岁徽章
日期:2015-03-03 16:54:15IT运维版块每日发帖之星
日期:2016-06-01 06:20:00
8 [报告]
发表于 2007-08-07 09:33 |只看该作者
支持!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP