AJAX传递中文字符串时必须把中文字符串编码成unicode,一般会用到JS的自带函数escape().不过找到了更好的函数来确决中文字符转换成unicode编码的函数9 x* d$ z+ S) u9 z- z6 t% c
8 e0 u: a! q5 y: r" gfunction uniencode(text) $ c4 K D2 J) o# ?* C2 o3 u! ~{ ) V# Y( E; _& F text = escape(text.toString()).replace(/\+/g, "%2B"); % l8 g; C* A+ R& |* @
var matches = text.match(/(%([0-9A-F]{2}))/gi); 5 u- Y' I7 ~) `: Z! e
if (matches) 9 p- b2 k- L3 a- v7 T9 F# s* ^$ H/ i. T6 m { * X) O3 i5 [7 Q; w' Y8 F; o2 ^
for (var matchid = 0; matchid < matches.length; matchid++) , z* y; u( E$ D( l, v
{ 3 n& @0 P' ] d1 m4 u4 I
var code = matches[matchid].substring(1,3); 7 h/ V) u7 `. M
if (parseInt(code, 16) >= 128) 3 Z- `2 p3 [+ o' J. \ i { f! H, m$ o; W text = text.replace(matches[matchid], '%u00' + code); # I# C2 k6 m% V' t/ N: g
} " F3 T$ ]: k H! b } ' X% \) j1 `( H; K
} ]' G4 f' k; I9 u% a" B text = text.replace('%25', '%u0025'); ' E+ [4 q" ?/ F9 ]1 y
; v) W/ b9 A6 V" G
return text; ! B# a+ l$ M+ o} ( l% T% X9 A' {0 a; _ i- x2 R# i" N0 n
& H# i6 l( ^: p8 \/ |
当然服务器端要对编码过的字符串进行第二次转码.把字符串转换成UTF-8编码. . |; ?$ y+ ^+ E! n ! B) S# m8 B; s9 U9 G* I$ K4 T
function convert_int_to_utf8($intval) 3 q( S! I9 V. i3 k% M9 j5 ~5 ^
{ 4 \ \4 ~1 D+ \0 f& X7 l8 H7 j
$intvalintval = intval($intval); * g z: C& ]3 X* C switch ($intval) - ~( ^* P; @. J { ' C& H7 B; L9 D // 1 byte, 7 bits ( i0 T& @2 `6 z3 r case 0: - {: q0 ^0 Z. h/ F
return chr(0); " |2 N' X3 |3 p8 u8 ~* \( { case ($intval & 0x7F): ' D: s7 `' I& L0 S return chr($intval); 6 w% U" O/ X( v. s! |$ n
( j \6 Z1 O' P1 f // 2 bytes, 11 bits ) _% l# R3 _9 a) f7 i
case ($intval & 0x7FF): " B N7 D' w" y5 i3 w2 D L
return chr(0xC0 | (($intval >> 6) & 0x1F)) . 5 B, {' X0 ]+ c$ N u" d4 z T
chr(0x80 | ($intval & 0x3F)); 1 S. j' f' A3 |