抱歉,评论被关闭
php中编码转换(ASCⅡ码)
以前花了不少时间,找可以把中文转ascii码的php代码,utf-8也只是ascii的一种。后来中手册上找到了个,把他改为了批量转换,还增加了一个常用的ascii代码还原字符。这个代码写好了有一段时间了,没什么时间把这些贴出来,大家可以看看,这个类不止只是中文的转换哟
<?php
class ascii
{
function decode($str)
{
preg_match_all( “/(d{2,5})/“, $str,$a);
$a = $a[0];
foreach ($a as $dec)
{
if ($dec < 128)
{
$utf .= chr($dec);
}
else if ($dec < 2048)
{
$utf .= chr(192 + (($dec – ($dec % 64)) / 64));
$utf .= chr(128 + ($dec % 64));
}
else
{
$utf .= chr(224 + (($dec – ($dec % 4096)) / 4096));
$utf .= chr(128 + ((($dec % 4096) – ($dec % 64)) / 64));
$utf .= chr(128 + ($dec % 64));
}
}
return $utf;
}
function encode($c)
{
$len = strlen($c);
$a = 0;
while ($a < $len)
{
$ud = 0;
if (ord($c{$a}) >=0 && ord($c{$a})<=127)
{
$ud = ord($c{$a});
$a += 1;
}
else if (ord($c{$a}) >=192 && ord($c{$a})<=223)
{
$ud = (ord($c{$a})–192)*64 + (ord($c{$a+1})–128);
$a += 2;
}
else if (ord($c{$a}) >=224 && ord($c{$a})<=239)
{
$ud = (ord($c{$a})–224)*4096 + (ord($c{$a+1})–128)*64 + (ord($c{$a+2})–128);
$a += 3;
}
else if (ord($c{$a}) >=240 && ord($c{$a})<=247)
{
$ud = (ord($c{$a})–240)*262144 + (ord($c{$a+1})–128)*4096 + (ord($c{$a+2})–128)*64 + (ord($c{$a+3})–128);
$a += 4;
}
else if (ord($c{$a}) >=248 && ord($c{$a})<=251)
{
$ud = (ord($c{$a})–248)*16777216 + (ord($c{$a+1})–128)*262144 + (ord($c{$a+2})–128)*4096 + (ord($c{$a+3})–128)*64 + (ord($c{$a+4})–128);
$a += 5;
}
else if (ord($c{$a}) >=252 && ord($c{$a})<=253)
{
$ud = (ord($c{$a})–252)*1073741824 + (ord($c{$a+1})–128)*16777216 + (ord($c{$a+2})–128)*262144 + (ord($c{$a+3})–128)*4096 + (ord($c{$a+4})–128)*64 + (ord($c{$a+5})–128);
$a += 6;
}
else if (ord($c{$a}) >=254 && ord($c{$a})<=255)
{ //error
$ud = false;
}
$scill .= “&#$ud;“;
}
return $scill;
}
class ascii
{
function decode($str)
{
preg_match_all( “/(d{2,5})/“, $str,$a);
$a = $a[0];
foreach ($a as $dec)
{
if ($dec < 128)
{
$utf .= chr($dec);
}
else if ($dec < 2048)
{
$utf .= chr(192 + (($dec – ($dec % 64)) / 64));
$utf .= chr(128 + ($dec % 64));
}
else
{
$utf .= chr(224 + (($dec – ($dec % 4096)) / 4096));
$utf .= chr(128 + ((($dec % 4096) – ($dec % 64)) / 64));
$utf .= chr(128 + ($dec % 64));
}
}
return $utf;
}
function encode($c)
{
$len = strlen($c);
$a = 0;
while ($a < $len)
{
$ud = 0;
if (ord($c{$a}) >=0 && ord($c{$a})<=127)
{
$ud = ord($c{$a});
$a += 1;
}
else if (ord($c{$a}) >=192 && ord($c{$a})<=223)
{
$ud = (ord($c{$a})–192)*64 + (ord($c{$a+1})–128);
$a += 2;
}
else if (ord($c{$a}) >=224 && ord($c{$a})<=239)
{
$ud = (ord($c{$a})–224)*4096 + (ord($c{$a+1})–128)*64 + (ord($c{$a+2})–128);
$a += 3;
}
else if (ord($c{$a}) >=240 && ord($c{$a})<=247)
{
$ud = (ord($c{$a})–240)*262144 + (ord($c{$a+1})–128)*4096 + (ord($c{$a+2})–128)*64 + (ord($c{$a+3})–128);
$a += 4;
}
else if (ord($c{$a}) >=248 && ord($c{$a})<=251)
{
$ud = (ord($c{$a})–248)*16777216 + (ord($c{$a+1})–128)*262144 + (ord($c{$a+2})–128)*4096 + (ord($c{$a+3})–128)*64 + (ord($c{$a+4})–128);
$a += 5;
}
else if (ord($c{$a}) >=252 && ord($c{$a})<=253)
{
$ud = (ord($c{$a})–252)*1073741824 + (ord($c{$a+1})–128)*16777216 + (ord($c{$a+2})–128)*262144 + (ord($c{$a+3})–128)*4096 + (ord($c{$a+4})–128)*64 + (ord($c{$a+5})–128);
$a += 6;
}
else if (ord($c{$a}) >=254 && ord($c{$a})<=255)
{ //error
$ud = false;
}
$scill .= “&#$ud;“;
}
return $scill;
}
最近在技术群中有位兄弟提出了一个问题:
想让自增的ID格式化为
A001——A999
B001——B999
……
Z001——Z999,
我最初的构思是循环中,分if条件判断出来进行A——Z字母,
但是这样做有个极大的缺点,代码显得很呆板冗余,26个英文字母等于需要26个判断。
后来有人支招将字母变成ASCⅡ码,恰好A——Z等于ASCⅡ码的65——91;
这样就只需要一个函数进行格式化ID就可以了:
function format_string($num) {
$tag=floor(($num–1)/999);
//part1计算asc码
$part1=65+$tag;
$part2=$num–999*$tag;
{
$b.=0;
}
$str=chr($part1).$b.$part2;
return $str;
}
{
echo $str=format_string($i).‘<br />‘;
}
$tag=floor(($num–1)/999);
//part1计算asc码
$part1=65+$tag;
//part2计算数字部分
$part2=$num–999*$tag;
$a=strlen($part2);
for($i=0;$i<(3–$a);$i++)
{
$b.=0;
}
$str=chr($part1).$b.$part2;
return $str;
}
for($i=1;$i<5000;$i++)
{
echo $str=format_string($i).‘<br />‘;
}
参考文章:http://jar-c.blog.163.com/blog/static/11640125020105744335269/
日志信息 »
该日志于2011-04-06 01:51由 凹凸曼 发表在PHP分类下,
评论已关闭。
目前盖楼