2012-03-23 4 views
1

JavaScript에서 PHP 스크립트에 대한 AJAX 요청을 수행하고 jQuery 라이브러리를 사용합니다.jQuery ajax + responseText + 문자 인코딩

$.ajax({ 
    async: "false", 
    cache: "false", 
    data: {login: strLogin, password: strPassword}, 
    datatype: "text", 
    error: connexionAjaxError, 
    success: connexionAjaxSuccess, 
    type: "POST", 
    url: "./Connexion" 
}); 

는 ".Connexion는"내 PHP 스크립트에 URL 리디렉션입니다 :
다음은 AJAX 요청을 수행 내 명령입니다.
connexionAjaxError는 HTTP 응답을 받자 마자 필연적으로 실행되는 JavaScript 함수입니다.
이유는 : 내 PHP 스크립트는 여기에 500
내 PHP 스크립트의 관련성이 가장 높은 부분과 동일한 HTTP 상태 코드와 텍스트/일반 페이지로 결과 : 여기

header("HTTP/1.0 500 Internal Server Error; 
     Content-type: text/plain; 
     charset=ISO-8859-1"); 

echo "été"; 

하면 connexionAjaxError의 서명입니다 콜백 함수 :

function connexionAjaxError(jqXHR, textStatus, errorThrown) 

"été"문자열에 대한 PHP 결과.
내 PHP 내부 인코딩은 ISO-8859-1이므로 결과 문자열은 [e9 74 e9]로 16 진수로 인코딩됩니다.

하지만 connexionAjaxError 콜백 함수의 jqXHR.responseText에는 1 자 문자열이 포함되어 있습니다.
JavaScript String 객체의 charCodeAt 메서드를 사용하여 문자의 유니 코드 (UTF-8?) 코드를 가져 왔습니다.
문자는 16 진법의 [ff ff]에 해당하는 10 진수 표기법으로 65535로 인코딩됩니다.

jqXHR.responseText에 "été"라는 3 자의 문자열이없는 이유를 모르겠습니다.
JavaScript의 전문가는 아니지만 jqXHR.responseText에는 UTF-8로 인코딩 된 문자열 만 포함될 수 있다고 가정합니다.
jqXHR.responseText의 "été"문자열은 [c3a9 74 c3a9]로 16 진수로 인코딩됩니다.
내가 다음 웹 사이트에서 문자 "E"에 대한 UTF-8 코드 검색이 : http://www.utf8-chartable.de/

답변

1

나는 스페인어로 개발을 많이하고 내가 이미 겪었어요부터 난 당신을 도움이 될 몇 가지를 발견했습니다 :

헤더 함수의 캐릭터 세트는 UTF-8이어야한다.

FILE 자체 (PHP 스크립트)는 UTF-8로 저장해야합니다. 메모장 + +로 파일을 편집하고 BOM없이 UTF-8이되도록 인코딩을 선택하면 쉽게이 작업을 수행 할 수 있습니다.

같은 JavaScript 및 HTML 파일은 모두 ANSI가 아닌 BOM이없는 UTF-8로 인코딩되어야합니다.

알려주세요.

+0

답변 해 주셔서 감사합니다. 이제 JS/PHP litteral 문자열을 인코딩하는 방법에 대한 더 나은 아이디어를 얻었습니다. 내 PHP/JS 스크립트에 ISO-8859-1 인코딩이 적용되면 litteral 문자열 "été"는 16 진수로 인코딩됩니다 [e9]. 그러나 UTF-8 인코딩이 PHP/JS 스크립트에 적용되면 litteral 문자열 "été"는 16 진수 표기법으로 인코딩됩니다 [c3 a9]. 내가 틀렸다고 말해줘. – user1139666

0

시도가 지금까지의 내가 jQuery를 아약스 아는 한, 사용자의 통화에서이 같은 컨텐트 유형을 설정하는 것은 항상 UTF-8입니다 지정되지 않은 경우.

$.ajax({ 
... 
    datatype: "text", 
    contentType: "application/x-www-form-urlencoded;charset=ISO-8859-1", 
    error: connexionAjaxError, 
    success: connexionAjaxSuccess, 
    type: "POST", 
... 
}); 

편집 : 내 대답은 helpfull없는 경우 , 그것은 당신이 서버의 캐릭터 세트 구성을 확인하면 도움이, 또한 그것을 게시 할 수 있습니다.

+0

jQuery 설명서의 내용 : http://api.jquery.com/jQuery.ajax/ contentType 설정은 서버로 전송되는 데이터에만 적용됩니다. 그러나 내 문제는 서버에서받은 데이터와 관련이 있습니다. PHP 스크립트 중 하나에서 mb_internal_encoding 함수를 실행했습니다. mb_internal_encoding 함수가 "ISO-8859-1"을 반환했습니다. 결과 : [1] 결과 문자열 "été"는 16 진수로 [e9 74 e9]로 인코딩됩니다. [2] HTTP 응답의 헤더에 "charset = IS0-8859-1"을 지정했습니다. – user1139666