现在的位置: 首页 > 综合 > 正文

php中ASCⅡ码

2012年04月06日 ⁄ 综合 ⁄ 共 2140字 ⁄ 字号 评论关闭

简介:这是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就可以了:

function
format_string(
$num
) {

$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 />
'
;
}

“php中ASCⅡ码”的更多相关文章 》

爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

http://biancheng.dnbcw.info/php/336623.html pageNo:10

抱歉!评论已关闭.