开发过php代码的程序员都知道,php自带的json_encode函数只能对 utf-8编码数据进行json转换,gbk下中文编码会丢失,变成null值。如何兼容gbk编码,并且utf-8转换后,数据长度会变大,如汉字“你好”会转换为“\u4f60\u597d”,长度有6个变成12。大量文字下,转换后数据会变得更多,占用更多带宽资源。下面通过自定义函数来避免上面两个问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | function _json_encode( $val ) { if ( is_string ( $val )) return '"' . str_replace ( array ( '\\' ,"\r "," \n ",'" ', '/' , "\t" , "\f" ), array ( '\\\\' , '\r' , '\n' , '\\"' , '\/' , '\t' , '\f' ), $val ). '"' ; if ( is_numeric ( $val )) return $val ; if ( $val === null) return 'null' ; if ( $val === true) return 'true' ; if ( $val === false) return 'false' ; $assoc = false; $i = 0; foreach ( $val as $k => $v ){ if ( $k !== $i ++){ $assoc = true; break ; } } $res = array (); foreach ( $val as $k => $v ){ $v = _json_encode( $v ); if ( $assoc ){ $k = '"' . addslashes ( $k ). '"' ; $v = $k . ':' . $v ; } $res [] = $v ; } $res = implode( ',' , $res ); return ( $assoc )? '{' . $res . '}' : '[' . $res . ']' ; } //--通过原生 json_encode及自定义函数来比较下 $arr = array ( 'name' => '你好' , 'age' =>31); echo json_encode( $arr ); //输出{"name":"\u4f60\u597d","age":21},长度为32 echo _json_encode( $arr ); //输出{"name":"你好","age":21},长度为26 $json_str =_json_encode( $arr ); var_dump(json_decode( $json_str ,true)); echo '<div></div><script>var data=' . $json_str . ';document.getElementById("messid").innerHTML=data.name;</script>' ; |
通过自定义函数实现后,输出值传递为js变量或php json_decode处理都没问题,都能正确解析出来。唯一注意的地方就是 html页面编码要跟php输出编码要一致就行了。
下一篇:
如何将php变量值安全的输出到js中
友情提示:垃圾评论一律封号...