该用户从未签到
|
AJAX传递中文字符串时必须把中文字符串编码成unicode,一般会用到JS的自带函数escape().不过找到了更好的函数来确决中文字符转换成unicode编码的函数5 S, u7 z) `- V" X/ `5 `
+ G* J% \ {" B" n. \" m1 dfunction uniencode(text) + n1 V/ A! m- H
{
& E8 b. j4 v" i text = escape(text.toString()).replace(/\+/g, "%2B");
5 v1 x4 u( r% P7 [8 P var matches = text.match(/(%([0-9A-F]{2}))/gi); ; ]- z& l9 g" T# l0 W$ {) o. z+ e5 X
if (matches) 0 Y+ y0 {8 t) `$ r; s4 V4 g4 ~5 o+ N
{
7 O3 e; j- C, I for (var matchid = 0; matchid < matches.length; matchid++)
+ |. h$ _0 k: G7 Q _; c {
" `# G1 a# U o+ h3 V var code = matches[matchid].substring(1,3); 5 x% D! I) \, v5 R5 h y7 h" R3 o5 a) D
if (parseInt(code, 16) >= 128)
) F; d1 J/ _4 L; ?( {+ G { 2 n R/ S% |3 Q( j5 x8 N, y
text = text.replace(matches[matchid], '%u00' + code);
: |" O* }7 P' Z I5 J/ G' R } $ I: g7 A2 v8 z' Y4 e+ {
} 5 b% I z2 b- B# D! Y7 V
} 7 N' u" x" t, G' l6 v
text = text.replace('%25', '%u0025'); & O' L) g% `; b+ A
2 Y* E( R4 K7 G7 C5 ~ return text;
; c- |! j, u7 `, n7 f. M}
! U; ^, o) S2 W3 ]% U) q
) b3 t$ Z! W+ \: x当然服务器端要对编码过的字符串进行第二次转码.把字符串转换成UTF-8编码. T5 ]+ a ]8 H! E6 P. `8 `& L3 z {
1 Z: n( K. b$ H4 R- N
function convert_int_to_utf8($intval)
( _* P- i O0 c8 a{ ' ]5 x+ L( f; {" e u5 ]
$intvalintval = intval($intval);
' E5 P5 |0 t/ n! s switch ($intval)
! h2 u- I" E7 b { & j8 x% c- n( z+ K- `! p( n( w8 ]
// 1 byte, 7 bits / M# w, r) H& r5 p: J
case 0: 7 G; g& v9 B) m* _' I6 Z
return chr(0);
; j8 @! r& E4 b/ @ R/ e& @ case ($intval & 0x7F): * t9 H: L `! s. H% f
return chr($intval);
2 ~1 J( Q/ @4 W+ z+ J9 Q7 D % }- _# F1 a3 X* j8 {
// 2 bytes, 11 bits 6 ^! Y/ a# z2 S) F# |4 }
case ($intval & 0x7FF):
; M5 `' |7 _7 z" \* {$ ]$ A return chr(0xC0 | (($intval >> 6) & 0x1F)) . * u- i6 C; [5 w2 P
chr(0x80 | ($intval & 0x3F));
* v+ L2 w. W! d: ], }4 ?2 | 0 X6 {3 }# V' x* x, }" l$ l5 I
// 3 bytes, 16 bits
1 p& y5 R5 F; m, W3 \ case ($intval & 0xFFFF):
; P* k; T$ A: \' g7 W return chr(0xE0 | (($intval >> 12) & 0x0F)) . , b( u6 i& Q" t7 i0 {5 C, p6 j
chr(0x80 | (($intval >> 6) & 0x3F)) . ! `. P4 d7 y. o$ h/ y" j+ @
chr (0x80 | ($intval & 0x3F)); 4 x6 h8 C; a0 B7 n" o! [
7 d$ I! ]! A6 y) v* r- j2 Q. H) X. T // 4 bytes, 21 bits
7 _3 i: h" m0 H# y/ u3 c; Y6 Y case ($intval & 0x1FFFFF):
4 J- p* A3 q f! O return chr(0xF0 | ($intval >> 18)) .
/ ]6 i# F* f/ {+ Y chr(0x80 | (($intval >> 12) & 0x3F)) . - O- B1 G8 R; K) m$ A" N2 i
chr(0x80 | (($intval >> 6) & 0x3F)) . 7 ?7 u9 v( l4 V5 E+ d
chr(0x80 | ($intval & 0x3F)); s% L; ?. ~9 a
}
4 |9 J' n; B4 F6 A3 v7 q M}5 P$ M+ ?# B1 j2 w) a
|
|