简介:这是php中ASCⅡ码的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。
class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=336623' scrolling='no'>以前花了不少时间,找可以把中文转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
;
}
最近在技术群中有位兄弟提出了一个问题:
想让自增的ID格式化为
A001――A999
B001――B999
……
Z001――Z999,
我最初的构思是循环中,分if条件判断出来进行A――Z字母,
但是这样做有个极大的缺点,代码显得很呆板冗余,26个英文字母等于需要26个判断。
后来有人支招将字母变成ASCⅡ码,恰好A――Z等于ASCⅡ码的65――91;
这样就只需要一个函数进行格式化ID就可以了:
$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 /> ' ;
}