国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php ajax交互漢字亂碼的問題解決方法

2024-05-04 21:56:51
字體:
來源:轉載
供稿:網友

ajax只支持utf-8格式,不能支持gb2312編碼格式,所以經常遇到gb2312的編碼的程序使用ajax就出現亂碼,剛找到一種解決方案是:

服務器端傳送的數據仍是gb2312編碼,客戶端用js將漢字轉變成utf8編碼顯示在頁面

方法一json

一,服務器端json數據用php的iconv函數轉換:iconv('gb2312', 'utf8', "被轉換字符串,輸出到瀏覽器");

客戶端獲取utf8數據,再轉成gb2312:

  1. function gb2utf8(data){//gb編碼是,ie通過二進制碼utf8->gbk轉為中文   
  2.      var glbencode = [];   
  3.      gb2utf8_data = data;   
  4.      execscript("gb2utf8_data = midb(gb2utf8_data, 1)""vbscript");   
  5.      var t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g|>,"%$2%$1").replace(/%([a-z].)%(.{2})/g|>,"@$1$2");   
  6.      t=t.split("@");   
  7.      var i=0,j=t.length,k;   
  8.      while(++i<j)>   
  9.          k=t.substring(0,4);   
  10.          if(!glbencode[k]) {   
  11.              gb2utf8_char = eval("0x"+k);   
  12.              execscript("gb2utf8_char = chr(gb2utf8_char)""vbscript");   
  13.              glbencode[k]=escape(gb2utf8_char).substring(1,6);   
  14.          }   
  15.          t=glbencode[k]+t.substring(4);   
  16.      }   
  17.      gb2utf8_data = gb2utf8_char = null;   
  18.      return unescape(t.join("%"));   

二,header("content-type", "application/x-www-form-urlencoded; charset=gbk"); //輸出頭標,設置為gbk編碼

三,在ajax請求數據前調用上面的方法指定請求使用的字符集:xmlhttp.setrequestheader( "content-type", "application/x-www-form-urlencoded;charset=gbk");

方案二:search.php

  1. <?php 
  2. header("content-type: text/html; charset=gb2312"); 
  3. include './search.htm'
  4. ?> 
  5. search.htm 
  6. <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"
  7. <html xmlns="http://www.w3.org/1999/xhtml"
  8. <head> 
  9. <meta http-equiv="content-type" content="text/html; charset=gb2312" /> 
  10. <title>高級搜索</title> 
  11. </head> 
  12. <body> 
  13. <h3>高級搜索</h3> 
  14. <form method="post" action=""
  15.   學校類型: 
  16.   <select name="schooltype"
  17.     <option value="">全部</option> 
  18.     <option value="1">小學</option> 
  19.     <option value="2">初中</option> 
  20.   </select> 
  21.   學校名稱: 
  22.   <select name="sid" id="sid"
  23.     <option value="">請選擇學校</option> 
  24.   </select> 
  25. </form> 
  26. <script type="text/"
  27. function ajax(settings) { 
  28.     var xhr = window.activexobject ? new activexobject("microsoft.xmlhttp") : new xmlhttprequest(), successed = false; 
  29.     xhr.open(settings.type, settings.url); 
  30.     if(settings.type == 'post'
  31.      xhr.setrequestheader('content-type''application/x-www-form-urlencoded'); 
  32.     xhr.send((!settings.cache ? 'time=' + new date().gettime() + '&' : '') + settings.data); 
  33.     settings.loader(); 
  34.     settimeout(function() { 
  35.         if(!successed) { 
  36.             alert('resquest timeout!'); 
  37.             xhr.abort(); 
  38.         } 
  39.     }, settings.timeout); 
  40.     xhr.onreadystatechange = function() { 
  41.         if (xhr.readystate == 4 && xhr.status == 200) { 
  42.             settings.callback(xhr.responsetext.replace(/(^s*)|(s*$)/g, "")); 
  43.         } 
  44.         successed = true; 
  45.     } 
  46. function a(t) { 
  47. ajax({ 
  48.   type: 'post'
  49.   url: 'ajax.php'
  50.   data: 'schooltype=' + t, 
  51.   timeout: 8000, 
  52.   cache: true, 
  53.   loader: function() {}, 
  54.   callback: function(d) { 
  55.    var arr = eval(d); 
  56.    if(typeof(arr) == 'object') { 
  57.     var obj, option; 
  58.     document.getelementbyid('sid').innerhtml = ''
  59.     for(var i = 0; obj = arr; i ++) { 
  60.      option = document.createelement('option'); 
  61.      option.value = obj[0]; 
  62.      option.innerhtml = txt2utf8(obj[1], '&#'); 
  63.      document.getelementbyid('sid').appendchild(option); 
  64.     } 
  65.    } 
  66.   } 
  67. }) 
  68. function txt2utf8(string, prefix){ 
  69.     for(var i=0,utf8=[];i<string.length;utf8.push((prefix||'u')+string.charcodeat(i++))); 
  70.     return utf8.join(''); 
  71. a(0); 
  72. </script> 
  73. </body> 
  74. </html> 
  75. ajax.php 
  76. <?php 
  77. header("content-type: text/html; charset=gb2312"); 
  78. $schooltype = !emptyempty($_post['schooltype']) ? $_post['schooltype'] : 0; 
  79. switch($schooltype) { 
  80.     case 0: 
  81.         echo "[['40', '太平溪鎮花栗包完全小學'],['41', '太平溪鎮長嶺黑龍江希望小學'],['42', '樂天溪鎮初級中學'],['43', '樂天溪鎮蓮沱初級中學']]"
  82.         break
  83.     case 1: 
  84.         echo "[['40', '太平溪鎮花栗包完全小學'],['41', '太平溪鎮長嶺黑龍江希望小學']]"
  85.         break
  86.     case 2: 
  87.         echo "[['42', '樂天溪鎮初級中學'],['43', '樂天溪鎮蓮沱初級中學']]"
  88.         break
  89.     default
  90.         break
  91. ?> 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 徐闻县| 高淳县| 天柱县| 南靖县| 辽阳县| 新安县| 文水县| 万载县| 枝江市| 清河县| 观塘区| 无锡市| 望谟县| 石台县| 张家港市| 云南省| 壶关县| 安新县| 霍城县| 年辖:市辖区| 郧西县| 东至县| 通州市| 雷山县| 延吉市| 射阳县| 堆龙德庆县| 曲松县| 九台市| 黑水县| 马尔康县| 北安市| 休宁县| 长垣县| 曲沃县| 边坝县| 寿光市| 洪洞县| 娱乐| 远安县| 新建县|