php encode64编码类的简单示例

前端之家收集整理的这篇文章主要介绍了php encode64编码类的简单示例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
PHP encode64编码类代码感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧!
encode64可以获得最短的由26个英文大小写字母数字加上"-_"两个符号编码的数据,这个个字串可以在网络自由传输,无需考虑被自动转码引起的混乱. 缺点: 对于大字串太慢了,原因不明,可能PHP脚本本身就是慢,所以它内置 很多函数,这些函数如果用脚本来实现是不可忍受的. 而JavaScript就没这个问题,脚本的速度快的多.
 

/**
 * PHP encode64编码类代码
 *
 * @param 
 * @arrange 512-笔记网: 512Pic.com
 **/
<?PHP
//encode64编码可以同时取代encodeURI,encodeURIComponent,endode函数,因为选取的这些字符都不会被编码.
class Encode64{
	function code($str) {
		$KEY = 'PaAwO65goUf7IK2vi9-xq8cFTEXLCDY1Hd3tV0ryzjbpN_BlnSs4mGRkQWMZJeuh';
		$a = StrToBytes($str);
		$len = count($a);
		$res = $len % 3; 
		$s = "";$i = 2;$v = 0;
		for (; $i < $len; $i += 3) {
			$v = $a[$i - 2] + ($a[$i - 1] << 8) + ($a[$i] << 16);
			$s .= $KEY[$v & 0x3f];
			$s .= $KEY[($v >> 6) & 0x3f];
			$s .= $KEY[($v >> 12) & 0x3f];
			$s .= $KEY[($v >> 18)];
		}
		if ($res == 1) {
			$v = $a[$i - 2];
			$s .= $KEY[$v & 0x3f];
			$s .= $KEY[($v >> 6) & 0x3f];
		} else if ($res == 2) {
			$v = $a[$i - 2] + ($a[$i - 1] << 8);
			$s .= $KEY[$v & 0x3f];
			$s .= $KEY[($v >> 6) & 0x3f];
			$s .= $KEY[($v >> 12) & 0x3f];
		}
		return $s;
	}
	function decode($codeStr) {
		$KEY = 'PaAwO65goUf7IK2vi9-xq8cFTEXLCDY1Hd3tV0ryzjbpN_BlnSs4mGRkQWMZJeuh';
		$dic = array();
		for ($i = 0; $i < 64; $i++) {
			$dic[$KEY[$i]] = $i;
		}
		$len = strlen($codeStr);
		$res = $len % 4;
		$cLen = floor($len/4)*3;
		if($res==2) $clen += 1;
		elseif($res==3) $clen += 2;
		$code = range(0,$clen);
		$i = 3;$v = 0; $j = 0;
		for (; $i < $len; $i += 4) {
			$v = $dic[$codeStr[$i - 3]];
			$v += $dic[$codeStr[$i - 2]] << 6;
			$v += $dic[$codeStr[$i - 1]] << 12;
			$v += $dic[$codeStr[$i]] << 18;
			$code[$j] = $v & 0xff;
			$code[$j+1] = ($v >> 8) & 0xff;
			$code[$j+2] = ($v >> 16) & 0xff;
			$j += 3;
		}
		if ($res == 2) {//正确的字节数肯定是余2或3,没有1的情况,如果出现,舍弃.
			$v = $dic[$codeStr[$i - 3]];
			$v += $dic[$codeStr[$i - 2]] << 6;
			$code[$j] = $v & 0xff;
		} else if ($res == 3) {
			$v = $dic[$codeStr[$i - 3]];
			$v += $dic[$codeStr[$i - 2]] << 6;
			$v += $dic[$codeStr[$i - 1]] << 12;
			$code[$j] = $v & 0xff;
			$code[$j+1] = ($v >> 8) & 0xff;
		}
		return BytesToStr($code);
	}
}
function BytesToStr($bytes) {
	$str = '';
	foreach($bytes as $ch) {
		$str .= chr($ch);
	}
	return iconv('UTF-16BE','utf-8',$str);
}
function StrToBytes($str) {
	$str = iconv('utf-8','UTF-16BE',$str);
	$len = strlen($str);
	$bytes = array();
	for($i=0;$i<$len;$i++) {
		$bytes[] =  ord($str[$i]) ;
	}
	return $bytes;//来自 5 1 2 p i c .c o m
}

 
原文链接:https://www.f2er.com/php/528515.html

猜你在找的PHP相关文章