js使用jsonencode转码

JavaScript015

js使用jsonencode转码,第1张

js使用jsonencode转码在向前端传递数据的时候,我们经常要把数据按照一定格式传递,如json格式,php中用json_encode来转换,但是这里通常会出现一个问题,那就是如果要转换的数据中包含中文,那么json_encode会自动将其中文字符转换成unicode编码。在调用json_encode 的时候我们可以先用urlencode()把它转换成unicode编码,经过json_encode后,再用urldecode解码,这样就能原样把数据传输到前台。在进行JS开发过程中,尤其是在开发报表时,报表已集成到Web页面中,通过在页面传递参数至报表中时,会发现有时某些参数值,传递到报表中是显示为问号或乱码等等一系列不能正常显示的情况。这是由于浏览器和报表服务器的编码不同,字符多次进行编码转换时出现错误导致字符的显示出现乱码,尤其是中日韩文和特殊字符更容易出现乱码问题。

以开发报表软件FineReport为例,在给报表服务器发送请求之前,对URL或者只对URL里面的参数名字和参数值,进行cjkEncode的编码,该方式兼容了各种不同的字符集,如ISO8859-1、 UTF-8、 GBK、 ENU_JP,尤其对中日韩文的处理采取了统一的方案。

js 只可以解析 utf-8 的url中文字符编码。

如果浏览器页面是 chrset=gbk 编码,那么经过 解析后 浏览器应该会自动把utf-8的字符转换gbk,所以在 浏览器端 就不需要 utf-8 编码在转成 gbk 了。

看看我们用到的函数:

php函数:

urlencode 这个函数是进行url编码的

iconv 这个函数是把 gbk编码 转换成 utf-8编码 ,因为js只能解释 utf-8编码

js函数:

unes cape 这个函数是 解码 utf-8编码的 ,解码后依然是utf-8 字集 , 但是浏览器会根据head charset自动转换成gbk编码, 这样js里就可以不用 php 中iconv 再次转换了。

decodeURI 这个函数是 解码 url 编码的 ,它和php的 urlencode 对应 ,别纠结 url 和 uri 。但是 decodeURI 的参数必须是 utf-8编码 , 所以 php 用iconv 转换了 。

下面上案例,就简单的 两个 例句 :

php的:

<?php

header("Content-Type:text/htmlcharset=gbk2312")

$arr=array("one"=>"如果在这里改变", "two"=>"2222222222", "three"=>"3333333")

$arr["one"] = urlencode(iconv("gbk","utf-8",$arr["one"]))

echo json_encode($arr)

===========================================================================================

js的 :

<script>

function createAjax(){

var request=false

//window对象中有XMLHttpRequest存在就是非IE,包括(IE7,IE8)

if(window.XMLHttpRequest){

request=new XMLHttpRequest()

if(request.overrideMimeType){

request.overrideMimeType("text/xml")

}

//window对象中有ActiveXObject属性存在就是IE

}else if(window.ActiveXObject){

var versions=['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP']

for(var i=0i<versions.lengthi++){

try{

request=new ActiveXObject(versions[i])

if(request){

return request

}

}catch(e){

request=false

}

}

}

return request

}

//注意: 要每次请求都要使用一个新的XMLHttpRequest

var ajax=null

function show(){

var helloobj=document.getElementById("hello")

ajax=createAjax()

ajax.onreadystatechange=function(){

if(ajax.readyState==4){

if(ajax.status==200){

eval_r("var rtext="+ajax.responseText)

helloobj.innerHTML=unes cape(decodeURI(rtext.one))

}else{

alert()

}

}

}

ajax.open("get", "server.php", true)

ajax.send()

}

</script>

<input type="button" onclick="show()" value="request">

<div style="width:500pxheight:200pxbackground:yellow" id="hello">

</div>