这个类相当好用.作用么,PHP做JSON传递GBK字符,比如中文,日文,韩文神马的Unicode最合适不过了..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
<?php
classcoding
{
//模仿JAVASCRIPT的ESCAPE和UNESCAPE函数的功能
functionunescape( $str )
{
$text =preg_replace_callback( "/%u[0-9A-Za-z]{4}/" , array (
& $this ,
'toUtf8'
), $str );
returnmb_convert_encoding( $text , "gb2312" , "utf-8" );
}
functiontoUtf8( $ar )
{
foreach ( $aras $val ){
$val = intval ( substr ( $val ,2),16);
if ( $val <0x7F){ // 0000-007F
$c .= chr ( $val );
} elseif ( $val <0x800){ // 0080-0800
$c .= chr (0xC0|( $val /64));
$c .= chr (0x80|( $val %64));
} else { // 0800-FFFF
$c .= chr (0xE0|(( $val /64)/64));
$c .= chr (0x80|(( $val /64)%64));
$c .= chr (0x80|( $val %64));
}
}
return $c ;
}
functionescape( $string , $encoding = 'gb2312' )
{
$return = '' ;
for ( $x =0; $x <mb_strlen( $string , $encoding ); $x ++){
$str =mb_substr( $string , $x ,1, $encoding );
if ( strlen ( $str )>1){ // 多字节字符
$return .= '%u' . strtoupper (bin2hex(mb_convert_encoding( $str , 'UCS-2' , $encoding )));
} else {
$return .= '%' . strtoupper (bin2hex( $str ));
}
}
return $return ;
}
functiongb2utf8( $string , $encoding = 'utf-8' , $from_encode = 'gb2312' )
{
returnmb_convert_encoding( $string , $encoding , $from_encode );
}
}
?>
|
google code 上找到的另外一个类似脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
<?php
functionphpescape( $str )
{
$sublen = strlen ( $str );
$retrunString = "" ;
for ( $i =0; $i < $sublen ; $i ++)
{
if (ord( $str [ $i ])>=127)
{
$tmpString =bin2hex(iconv( "gbk" , "ucs-2" , substr ( $str , $i ,2)));
$tmpString = substr ( $tmpString ,2,2). substr ( $tmpString ,0,2);
$retrunString .= "%u" . $tmpString ;
$i ++;
} else {
$retrunString .= "%" . dechex (ord( $str [ $i ]));
}
}
return $retrunString ;
}
functionescape( $str )
{
preg_match_all( "/[\x80-\xff].|[\x01-\x7f]+/" , $str , $r );
$ar = $r [0];
foreach ( $aras $k => $v )
{
if (ord( $v [0])<128)
$ar [ $k ]=rawurlencode( $v );
else
$ar [ $k ]= "%u" .bin2hex(iconv( "UTF-8" , "UCS-2" , $v ));
}
returnjoin( "" , $ar );
}
functionphpunescape( $source )
{
$decodedStr = "" ;
$pos =0;
$len = strlen ( $source );
while ( $pos < $len )
{
$charAt = substr ( $source , $pos ,1);
if ( $charAt == '%' )
{
$pos ++;
$charAt = substr ( $source , $pos ,1);
if ( $charAt == 'u' )
{
// we got a unicode character
$pos ++;
$unicodeHexVal = substr ( $source , $pos ,4);
$unicode =hexdec( $unicodeHexVal );
$entity = "&#" . $unicode . ';' ;
$decodedStr .=utf8_encode( $entity );
$pos +=4;
} else {
// we have an escaped ascii character
$hexVal = substr ( $source , $pos ,2);
$decodedStr .= chr (hexdec( $hexVal ));
$pos +=2;
}
} else {
$decodedStr .= $charAt ;
$pos ++;
}
}
return $decodedStr ;
}
functionunescape( $str )
{
$str =rawurldecode( $str );
preg_match_all( "/(?:%u.{4})|&#x.{4};|&#\d+;|.+/U" , $str , $r );
$ar = $r [0];
#print_r( $ar );
foreach ( $aras $k => $v )
{
if ( substr ( $v ,0,2)== "%u" )
$ar [ $k ]=iconv( "UCS-2" , "UTF-8" ,pack( "H4" , substr ( $v ,-4)));
elseif ( substr ( $v ,0,3)== "&#x" )
$ar [ $k ]=iconv( "UCS-2" , "UTF-8" ,pack( "H4" , substr ( $v ,3,-1)));
elseif ( substr ( $v ,0,2)== "&#" )
{
//echo substr($v,2,-1)."";
$ar [ $k ]=iconv( "UCS-2" , "UTF-8" ,pack( "n" , substr ( $v ,2,-1)));
}
}
returnjoin( "" , $ar );
}
?>
|