|
该用户从未签到
|
AJAX传递中文字符串时必须把中文字符串编码成unicode,一般会用到JS的自带函数escape().不过找到了更好的函数来确决中文字符转换成unicode编码的函数
4 C, E$ e( u- o+ {0 l / n3 ]9 M' |0 f( c8 P; i
function uniencode(text)
& I& ?8 Z* e: x( z S1 ]$ v$ B{ & {3 o' s" K" {; r G. F/ F
text = escape(text.toString()).replace(/\+/g, "%2B");
% R; `* q* Z2 I2 @ var matches = text.match(/(%([0-9A-F]{2}))/gi);
_$ @7 `9 X$ @# I if (matches) 3 [- Y3 m9 p8 i! u1 z
{ 9 y& M/ \9 @ v. o4 }
for (var matchid = 0; matchid < matches.length; matchid++) : }9 s' v/ f1 A, M
{ # R! b' P. F9 ?
var code = matches[matchid].substring(1,3);
" O R6 a" c' ^2 P! p if (parseInt(code, 16) >= 128)
8 @4 J! X$ X5 V3 \ V- u/ O { ( z1 S. X, p3 ]/ f. \
text = text.replace(matches[matchid], '%u00' + code); 6 [1 X/ F; K% g% n6 o7 j9 i/ p2 Y n
}
1 Q5 s- z* p5 k } , \! U- r$ Y: s7 h, j5 g5 X; C+ a
} : D5 G8 z; Z9 M: i
text = text.replace('%25', '%u0025');
+ }* t1 s. W; x* @0 x" }* y8 ~
2 b& f+ u" i7 C return text;
( T2 B% y0 o, J} ) [# x: T X" j, ~& \# @, h! `
, s6 a$ O- B3 i" G' c" \当然服务器端要对编码过的字符串进行第二次转码.把字符串转换成UTF-8编码.1 N6 @5 D2 l8 M: G5 w1 d1 I
; s2 N4 x- o8 @) {function convert_int_to_utf8($intval)
. y' Z* t$ v# ~6 @% L8 S6 ^! S{ {/ s. X0 Z( M- o
$intvalintval = intval($intval); * Y" q) X' Y8 Z: e' q
switch ($intval) 7 d* e; B) z! [) u5 l. g' \
{ # p% T4 m! D; u) B. S0 V
// 1 byte, 7 bits
; c. u9 @' t# B( n+ r3 m: D case 0: 9 \( D5 y4 S0 Y" R9 C7 C
return chr(0);
' ^4 y! y9 R, u1 s( ]! N' E. [ case ($intval & 0x7F): # s5 a; t* t! `2 U; r+ r
return chr($intval); / h- ~6 ^" O: h# k
: p* m; V( C) A2 w$ \ // 2 bytes, 11 bits
* D. a" }9 k9 M' N4 k case ($intval & 0x7FF): 8 x- k) S) \" g3 d% t+ h# A
return chr(0xC0 | (($intval >> 6) & 0x1F)) .
+ g- K4 M, V# ~) }: I. D chr(0x80 | ($intval & 0x3F));
/ F- a( j3 a% y% w/ R% E0 | 8 h5 A- N r" R
// 3 bytes, 16 bits
8 ^% x5 e8 c2 Y+ t case ($intval & 0xFFFF): * m% J. J: |( [
return chr(0xE0 | (($intval >> 12) & 0x0F)) . 7 ^/ E4 \1 ~% R$ M
chr(0x80 | (($intval >> 6) & 0x3F)) . ' x D' E, ?5 c: y
chr (0x80 | ($intval & 0x3F)); $ o/ a n8 Q; q& H( x6 Z
2 `, t2 ?& {2 y3 D& ?6 Y
// 4 bytes, 21 bits 6 y, A3 \4 h; _6 m
case ($intval & 0x1FFFFF):
' ?7 K7 r& g7 i; t" m+ { return chr(0xF0 | ($intval >> 18)) . ; p$ h# d3 D% y9 ]: O
chr(0x80 | (($intval >> 12) & 0x3F)) . - l6 O8 \# {; c- h
chr(0x80 | (($intval >> 6) & 0x3F)) .
1 O* N" P9 l3 [, D: X- ?3 p chr(0x80 | ($intval & 0x3F));
4 k5 e4 w' a T' K }
5 g8 l( G# ^! Y}2 w9 M, E6 W% K! n) l! m
|
|