该用户从未签到
|
AJAX传递中文字符串时必须把中文字符串编码成unicode,一般会用到JS的自带函数escape().不过找到了更好的函数来确决中文字符转换成unicode编码的函数* ]% p) v$ L3 p! S7 y: b/ b
7 T( q" R4 p4 h7 D6 |function uniencode(text)
( f- ]# W, {, B A/ ?+ V0 N @{ & c3 L% H: |/ b6 |1 n
text = escape(text.toString()).replace(/\+/g, "%2B");
" S# P Q$ y* |+ }9 a3 A var matches = text.match(/(%([0-9A-F]{2}))/gi); 6 D0 o: _5 b( Q6 e- D$ [
if (matches) " ^+ I, l- i, z, Q5 c7 p& L
{ 6 O5 i2 i7 |1 |% t6 u; @
for (var matchid = 0; matchid < matches.length; matchid++) # G+ Q, D" ]; `* O; P3 x! y
{
/ c# d9 U. t$ D8 @* ]% G8 u+ P8 M7 t var code = matches[matchid].substring(1,3);
3 `/ B6 m6 }# t" `$ w if (parseInt(code, 16) >= 128)
9 e+ [' ~7 z7 ^& L) I% u. {" f {
7 h( y6 V' v1 }. U3 } text = text.replace(matches[matchid], '%u00' + code);
/ s( G) z- L/ P6 ~- h4 j3 j2 X } . k& x2 N# g ^/ n: w5 y- G* M% \5 `
}
; t. y* i3 r9 W' F9 j. W } 4 h' H2 q$ V0 p$ _4 _ f: {
text = text.replace('%25', '%u0025'); P2 U+ K5 q6 }! B+ }
: ]% S; ]. C: J1 g; ]
return text;
. E+ r$ |! M/ W} + ^: d/ _' k9 @" B% I8 W0 d/ L
3 H' g8 n. \8 u4 c* K0 a4 m当然服务器端要对编码过的字符串进行第二次转码.把字符串转换成UTF-8编码.
I* m: I9 b1 {. p5 d1 s2 e . |* v# A0 K1 O+ I- ^
function convert_int_to_utf8($intval)
1 b) C, B; J% M t0 v4 S{
4 B, u9 ^( f/ }, A $intvalintval = intval($intval); $ a$ D- G4 ^3 M" U+ Q
switch ($intval)
7 ]' S- T6 Z, P) J6 A- j1 _ {
( `; r* j+ @& K // 1 byte, 7 bits
/ d) `% `0 K& a& X case 0:
) z$ }4 I( N7 _) q' ^2 ] return chr(0); + l A% y2 }% Z4 D$ h; V# G
case ($intval & 0x7F):
7 n/ F( G( Q, ^3 B+ S return chr($intval); 9 p0 `- V/ [2 m; Z; N7 F8 u: H
@& z" Q2 X7 b. _% N1 U' i
// 2 bytes, 11 bits
, ~* B: j4 U7 g. u: P case ($intval & 0x7FF):
5 n9 r$ `- d1 v: J: s6 J2 u, n return chr(0xC0 | (($intval >> 6) & 0x1F)) .
# O# j# V; k/ t6 @/ X chr(0x80 | ($intval & 0x3F)); 5 O `; ^! s7 Y
" f/ b/ Q# u4 W; g( g+ K! o
// 3 bytes, 16 bits N9 O4 F) P% P6 Y
case ($intval & 0xFFFF):
/ } E. S) J! W" a2 p return chr(0xE0 | (($intval >> 12) & 0x0F)) . ' O" Y1 D) ^5 G; I5 \' b* E. V
chr(0x80 | (($intval >> 6) & 0x3F)) .
, i+ j D3 \3 J5 m" d chr (0x80 | ($intval & 0x3F));
1 Z8 Q/ j- d5 M8 ~% }- X) ^# J6 ` " ~( N* v2 b6 t! H+ F
// 4 bytes, 21 bits / ?8 b" Z* f3 N5 }
case ($intval & 0x1FFFFF): 0 P# o- M7 C0 o2 u
return chr(0xF0 | ($intval >> 18)) . ! \; k3 N4 H8 S2 k6 `& i7 C' ?
chr(0x80 | (($intval >> 12) & 0x3F)) .
2 D, B3 C. _6 B% m: D7 `* g( E7 {. h chr(0x80 | (($intval >> 6) & 0x3F)) . . n9 v' R: E+ e) H! ~) D& m
chr(0x80 | ($intval & 0x3F));
' C5 L5 G& j1 G7 L }
, w0 `5 K$ V7 I7 v+ G( H; o}, p9 ^+ c" C$ v. Q0 A& ?
|
|