该用户从未签到
|
AJAX传递中文字符串时必须把中文字符串编码成unicode,一般会用到JS的自带函数escape().不过找到了更好的函数来确决中文字符转换成unicode编码的函数( G$ a+ _5 H$ L5 _' A3 l
3 V3 s6 v0 F1 x0 b1 @& x
function uniencode(text) 5 g9 K! Y* \* F# \$ k1 i$ X7 s' @
{
2 T( `4 e% [7 T. O4 L# Q text = escape(text.toString()).replace(/\+/g, "%2B"); 1 e) o( W, X) [" ^
var matches = text.match(/(%([0-9A-F]{2}))/gi); ; x9 C6 z/ u/ E9 }2 \
if (matches)
" S( d+ v2 Q b) Y; m7 c {
8 T5 J/ p' y7 d% j' V: W for (var matchid = 0; matchid < matches.length; matchid++)
) L$ B4 w3 Q( P& } {
2 V5 _( c0 G( Q% s) O7 K var code = matches[matchid].substring(1,3);
6 b6 ?& N1 t9 V- t2 j$ p if (parseInt(code, 16) >= 128)
. D1 S- D# w5 y/ B6 _ { 3 f r7 O2 I; V9 X0 E8 ]6 {8 o
text = text.replace(matches[matchid], '%u00' + code);
3 q* \5 \) h% @8 u. z$ k5 B7 e } 8 c& @6 ?7 w& y9 q5 V
}
& b; k' X: a! x7 r; k5 z3 @$ p } & K* T2 P4 e* C) b+ D
text = text.replace('%25', '%u0025'); " u/ l" B; [! k5 P
" S" L+ S: v' o, f. v
return text; * g x0 g1 x3 k @5 u
} $ b1 [* b+ V% s7 n0 t5 F J# O7 S
# l9 q. Y7 O; ]- D7 O
当然服务器端要对编码过的字符串进行第二次转码.把字符串转换成UTF-8编码.6 r- T+ h: J3 @$ ?# Q
( ~ ~8 m6 G) T5 K& C+ u9 q1 q
function convert_int_to_utf8($intval) - G. A, t A. w) a0 m: R. ?
{ 7 q; n) S; j3 F6 A6 } \0 y
$intvalintval = intval($intval); 4 |; V7 G, B) Q4 S" f
switch ($intval)
' C# r. T% d h& O- Q. h { " _& R6 {7 Y: o c7 F" b( t
// 1 byte, 7 bits / S# `# \6 H! Z( Y) E6 }) t% n
case 0:
, _- _& w2 b3 k* e' ^. J return chr(0); g; j; E1 n0 v: ]; u9 R5 M
case ($intval & 0x7F): ! s5 k/ D% k5 X6 e. m& Q0 g
return chr($intval);
- f3 f! m" V- D8 |: G1 N 8 ]3 W$ D0 P- G" ?3 |
// 2 bytes, 11 bits 6 l: n% k) p& W
case ($intval & 0x7FF):
! S/ O. e- q6 V- O return chr(0xC0 | (($intval >> 6) & 0x1F)) . 5 s' _3 z, |; ^# a8 s
chr(0x80 | ($intval & 0x3F)); 0 ^! d6 y0 N/ \6 l6 y3 ~
4 V2 B# I$ r) F: Z. c1 `" \8 x- G // 3 bytes, 16 bits
2 A, A& @4 ]4 w$ Y) N case ($intval & 0xFFFF):
" A% Y8 h( n5 O return chr(0xE0 | (($intval >> 12) & 0x0F)) .
3 J1 f" O% n) {) y' W# x chr(0x80 | (($intval >> 6) & 0x3F)) . 8 j# q0 E' Q- o3 T6 k( r( o
chr (0x80 | ($intval & 0x3F));
: q1 Y. G. {+ A: [+ W! h) d' i 8 U$ t- S, h3 w4 {, Y
// 4 bytes, 21 bits
' C1 B8 t8 H" E; E8 Q* {2 y6 O case ($intval & 0x1FFFFF): $ E3 i% ~3 Y3 K) d$ h* y) |
return chr(0xF0 | ($intval >> 18)) .
# r- f9 d; N x) t$ k! M8 g chr(0x80 | (($intval >> 12) & 0x3F)) .
8 S' u& J0 p- `+ t& o chr(0x80 | (($intval >> 6) & 0x3F)) .
+ ^& C4 D0 V- W+ T chr(0x80 | ($intval & 0x3F)); u& H/ K- O( m1 `" j/ B, D5 a4 p
}
$ a' r0 S9 X# [3 a8 i8 h. N3 G}
5 _$ @& Y. _ D! P5 X9 j4 l |
|