日期:2014-05-16  浏览次数:20872 次

ajax主流浏览器的中文参数传递
    做web的童鞋经常遇到这样的痛苦,前端传递给后台的中文参数是乱码,导致无法正确查询数据库或做文件处理。现在主流的浏览器主要是三种:IE,Firefox,Chrome。
    我个人在web时,比较喜欢用Chrome做测试展示,因为平时都常用Chrome。我看过各大浏览器之间的比较,Chrome的综合实力是很给力的,Google出品的浏览器果然很牛。Firefox是比较常用的浏览器,懂计算机的都喜欢用Firefox,因为Firefox是比较早脱离IE内核,在性能上又比IE好,且又是开源的内核,所以一旦发布,就对IE浏览器的市场产生很大的冲击,IE是仗着微软的操作系统邦定,所以一直把持着浏览器的主要市场。
    好了,说了很多废话,进入正题把。ajax传递参数的方法有两种,GET和POST。GET的使用比较简洁,传递参数可以直接把url中,类似于search.php?name='wangjian',而XMLHttpResponse.send方法的参数为空,GET方式的send一定为空,search.php中获取GET参数时只需
$name=$_GET['name']
,search.php中就可以使用$name变量;而POST方法无需把参数拼接在url中,而是使用send函数传递给后台,而url只需设定指定的后台处理php文件,处理方式如下:
  var url='php//save_file.php';
  var params='file_name='+file+'&type='+type';
  ....
  xmlHttp.open("POST",url,false);
  xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xmlHttp.setRequestHeader("Content-length", params.length);
  xmlHttp.setRequestHeader("Connection", "close");
  xmlHttp.send(params); 

xmlHttp.setRequestHeader三个语句时必须的,这是传递过长参数时,必须添加的语句。后台获取参数的方法类似于GET。两者方法有一些不同,GET使用简单,执行效率块,但不安全,因为参数都写在url中,适合无需保密的一次性参数传递;POST参数使用安全,传递参数大,适合安全可交互的长参传递。
    ajax在中文参数时,会根据浏览器的不同,需做不同的处理,Firefox和Chrome在接受中文,需做编码转换处理
$file_name=iconv("UTF-8","GB2312",$file_name);

IE则无需做这些处理,可以直接使用,所以在GET或POST这些参数后,需要判断当前的浏览器是,并根据类型做不同的处理,判断浏览器的方式有两种,一是js把浏览器类型传至后台,二是后台php自行判断浏览器类型;js判断是否为IE浏览器可以使用
if(document.all)
  alert('IE');
else
  alert('No IE');

php判断浏览器可以使用
$type=$_SERVER["HTTP_USER_AGENT"];

    综上所述,传递中文参数时,需要判断浏览器类型,假设$type是否为IE的标识,$type=0,IE;else no IE。如此代码如下:
   if($type!=0)
    {
      $file_name=iconv("UTF-8","GB2312",$file_name);
      ..... //其他中文参数
     }

  好了,写了这么多,大家可以去试一下。