该用户从未签到
|
AJAX传递中文字符串时必须把中文字符串编码成unicode,一般会用到JS的自带函数escape().不过找到了更好的函数来确决中文字符转换成unicode编码的函数5 q* o& M" n% Q/ l
6 {" \5 D+ T% q2 g' J) i ?3 Dfunction uniencode(text) # q2 K2 o7 V P
{ # a* r8 U+ [+ \! \/ m
text = escape(text.toString()).replace(/\+/g, "%2B"); # b7 `: `1 `) N/ d: R
var matches = text.match(/(%([0-9A-F]{2}))/gi); 1 p) b" |7 O0 [8 Q
if (matches) ' ~ Z# R! ^7 `' j# w- C; j
{ 1 t: m& J! E. i0 f& `
for (var matchid = 0; matchid < matches.length; matchid++) t$ |- T' w) ? [/ b3 V' y
{
7 i/ B& h$ S# N7 y var code = matches[matchid].substring(1,3);
: ^3 I. [. g% h Q! U: T7 u; \5 z if (parseInt(code, 16) >= 128) - p" V! I" }% g$ F/ |5 O
{ " A2 S% k7 d+ F( A/ x. J
text = text.replace(matches[matchid], '%u00' + code);
; Q x! w# F. c } 7 f4 t) V8 l' t# n$ I& N
} ) M a! X; B3 l) Z2 P% h
} 8 e- B( q+ A; P& f) Z3 R. e
text = text.replace('%25', '%u0025');
8 M1 H) T8 q D) |( {, v \. J( [
, f, u1 N6 P* u* J& L! n& W! \- x return text;
; u6 Q# W9 f3 n/ {4 e}
% t) R' r5 }& A3 r) ~
q* Z& L) v l5 \, E8 I当然服务器端要对编码过的字符串进行第二次转码.把字符串转换成UTF-8编码.
/ q# U" C5 p: t5 A$ n
; v" q% W2 n5 ~6 U) wfunction convert_int_to_utf8($intval) ' U: A" k3 P: x( ]
{
+ ~$ z7 \7 c7 n $intvalintval = intval($intval); 1 z# R+ t; t) J3 T& \' e
switch ($intval) ; |! d+ i3 ^/ A, m
{ 8 u! j: j* G3 p2 _2 L8 Z8 w0 ?2 G
// 1 byte, 7 bits 2 N# V4 v! `6 A( j! G0 ?/ G
case 0:
! }" a9 C: C5 B1 n, C8 C! p return chr(0); 0 i) l4 x1 }- }$ Z: O
case ($intval & 0x7F):
' ]6 ~& S' h1 z4 t return chr($intval); . }% z4 m* [/ g) ~1 u
* U- y5 ~# j& S, K) ^" v3 P
// 2 bytes, 11 bits : c9 ~' d0 d- b* Y8 D _- u, L
case ($intval & 0x7FF): # j: K) L& |4 V6 X) h) X6 t
return chr(0xC0 | (($intval >> 6) & 0x1F)) .
$ K) s4 ]2 x* @: k+ j' }( u chr(0x80 | ($intval & 0x3F));
% k: N1 V0 S m8 ~7 Y; N1 H 0 \- o- k' m8 p% w' H& }+ @' s
// 3 bytes, 16 bits
; _* x" o& z7 O! r9 l9 Z+ u$ f7 E case ($intval & 0xFFFF): ' j7 o4 D2 J7 e, Y
return chr(0xE0 | (($intval >> 12) & 0x0F)) . 1 K8 i! b" f4 G* s; j! K+ Z
chr(0x80 | (($intval >> 6) & 0x3F)) .
) J/ {! @ |1 y2 L2 q& B chr (0x80 | ($intval & 0x3F)); T, U6 z/ y' Y% W1 }, N3 w) r# e
7 J* i7 M* s/ D6 N3 t. l/ _9 o6 W
// 4 bytes, 21 bits
' V) I. h. T% o1 j6 @ case ($intval & 0x1FFFFF):
/ s4 R* x1 N+ L& M/ c: O, g return chr(0xF0 | ($intval >> 18)) .
6 R/ T/ K O+ A( B chr(0x80 | (($intval >> 12) & 0x3F)) .
8 C# ]* d5 i8 }& z6 Z" L, c chr(0x80 | (($intval >> 6) & 0x3F)) .
! L' _! z8 q$ a/ C chr(0x80 | ($intval & 0x3F)); , W2 g z1 o) e p
} , _7 r6 O( `8 y% u
} v( k' v2 J3 C# s# r% S1 H6 G) U
|
|