utf8/iso-8859-1编码i $ .ajax()

问题描述:

如何在ajax请求中编码/解码utf8?

我的页面是用iso-8859-1编码的,但是在发现响应并再次解码时,如何轻松地将数据编码为utf8?

function Ajax(){ 
    var _this = this; 

    this.url = null; 
    this.data = null; 
    this.success = null; 

    this.global = true; 
    this.timeout = JSON_TIMEOUT; 
    this.cache = false; 
    this.dataType = 'json'; 
    this.type = 'post'; 

    this.send = function(){ 
     var jqxhr = $.ajax({ 
       url : this.url, 
       data : this.data, 
       timeout : this.timeout, 
       cache : this.cache, 
       dataType : this.dataType, 
       type : this.type, 
       global : this.global 
       } 
      ) 
      .success(this.success) 
      .error(function(){ 
       // something 
      }) 
      .complete(function(){ 

      }); 
    }; 
} 

你不需要做任何事情。 jQuery的ajax()函数将始终以UTF-8传输数据。

无论你的页面被编码在哪里,因为Javascript总是在内部使用Unicode并正确翻译你的iso-8859-1页面。

我认为你需要使用的格式如下:

$.ajax({ 
    type: "POST", 
    url: "WebMethodName", 
    data: {'fname':'dave', 'lname':'ward'}, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json" 
}); 
+0

jQuery的ajax()调用将始终以UTF-8编码传输数据。不管你的页面编码的是什么,编码的是什么statis文件,因为JavaScript总是将当前的编码转换为Unicode。 – Codo 2011-05-29 19:05:50

我解决了这个问题分两个步骤... 首先,在被称为“php_function.php” PHP函数,包括我在每一页上的文件,我添加了这个片断:

“php_function.php” :

<?php 
/*----------------------------------------------------------------------------- 
Codification($string) 
$string = String to be consulted 
Returns which encoding used in string 
-----------------------------------------------------------------------------*/ 
function Codification($string) { 
    return mb_detect_encoding($string.'x', 'UTF-8, ISO-8859-1'); 
} 

/*----------------------------------------------------------------------------- 
Updates all parameters sent from any page. 
-----------------------------------------------------------------------------*/ 
foreach($_GET as $key => $value) 
    $_GET[$key] = (Codification($value)=='UTF-8') ? utf8_decode($value):$value; 
foreach($_POST as $key => $value) 
    $_POST[$key] = (Codification($value)=='UTF-8') ? utf8_decode($value):$value; 

/*----------------------------------------------------------------------------- 
GetPost($string) 
$ string = name of the variable used 
Receives the name of the variable and tries to get by Post and/or GET 
Returns the value of the variable ... 
-----------------------------------------------------------------------------*/ 
function GetPost($GetPost) { 
    $Ret = $_GET[$GetPost]; 
    if(trim($Ret) == '') 
    $Ret = $_POST[$GetPost]; 
    return $Ret; 
} 
?> 

其次,我称之为 'php_function.php' 在我的请求的页面:

'requested_pa​​ge.php':

<?php 
require_once('php_function.php'); 
//... Get vars here 
$var1 = GetPost('var1'); 
echo $var1; 
//... Other implementations 
?> 

发件人页面是一样的东西:

'的index.php':

<html> 
<head> 
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
</head> 
<body> 
    <form name="form1" method="post" type="multipart/form-data"> 
    <input type="text" name="var1"> 
    <input type="submit" name="Send" id="Send" value="Send"> 
    </form> 
    <script> 
    $(function(){ 
     Ajax = function(params) { 
     $.ajax({ 
      url: 'requested_page.php', dataType: 'html', type: 'POST', 
      data: params, async: false, 
      error: function(e) { alert("Error: "+e.responseText); }, 
      success: function(data) { alert(data); }, 
      complete: function() {} 
     }); 
     } 
     $("form").on("submit", function(e) { 
     e.preventDefault(); 
     var params = $(this).serialize(); 
     Ajax(params); 
     }); 
    }); 
    </script> 
</body> 
</html> 

通过发送文本,如 'aáàéêeoóu' 用ajax,没有编纂功能打印 'aáÃéêeoóu' (由ajax编码的UTF-8),编码功能打印'aáàéêeoóu'!