2012-05-09 5 views
2

자바 스크립트에서 PHP로 문자열을 보낼 수 있어야하는 곳에서 응용 프로그램을 만들고 있습니다. 처음에는 방금 $_POST 변수를 통해 전송했지만 문자열에 값을 삽입하는 것으로 나타났습니다.문자열에 의미없는 문자를 삽입하는 PHP

그런 다음 전송에서 데이터가 엉망이되었다고 가정하기 때문에 데이터를 전송하기 위해 기본 64를 사용하기 위해 두 부분을 모두 레코딩했습니다. 이 문자열은 실수없이 잘 전달되었지만,베이스 64에서베이스 16로 다시 변환하면 이전과 완전히 똑같은 오류가 발생합니다!

다음은 두 문자열 (16 진 덤프)의 비교입니다. 각 문자열에는 두 개의 의미있는 데이터 덩어리가 있으며, PHP가 이러한 영역 근처에서만 실수를하는 것으로 보입니다. 첫 번째 줄은 PHP가 문자열을 해석하는 방법이고, 두 번째 줄은 JavaScript에서 보내는 방법입니다.

c2 b0 c2 a7 c3 9a 7a 00 00 00 c2 bb 30 4d 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
b0 a7 da 7a 00 00 00 00 00 00 bb 30 4d 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

왜 이러한 팬텀 바이트가 나타 납니까?

편집 : 여기에 제가 사용하고있는 코드가 있습니다.

는 자바 스크립트 :

function sendRequest(body) 
{ 
    var url = "../update/index.php"; 
    $.post(url,{msg:body},function(data,status,jqx) 
    { 
     $("#response").html(data); 
    }); 
} 

body은 그 시작 하드 코딩 "\u00b0\u00a7\u00da\u007a"로하는 문자열입니다. PHP에이어서

:

$msg =$_POST['msg']; 
plain_hex_dump($msg); 

plain_hex_dump 단순히 2 개 개의 육각형의 첫번째 결과로서 진수 문자열을 출력하는 상기 덤프.

+1

코드를 보여줄 수 있습니까? – Sampson

+0

게시물을 업데이트했습니다. 그러나 문제는 내가 이해하지 못하는 인코딩 개념에서 비롯된 것 같습니다. JavaScript 코드가 2 바이트 이상을 사용하는 문자를 생성하지 않는다는 것이 확실합니다. –

답변

3

이것은 UTF-8 인코딩입니다.

b0c2 b0으로 인코딩됩니다. a7c2 a7이됩니다. dac3 9a이됩니다. 7a은 변경되지 않습니다.

따라서 b0 a7 da 7a은 UTF-8로 c2 b0 c2 a7 c3 9a 7a으로 표시됩니다.

Javascript는 body 변수를 UTF-8 인코딩 한 것으로 보입니다. PHP에서 utf8_decode function을 사용해보세요.

+0

정말 고마워, 그게 해결 됐어! 나는 하루 종일 머리를 때려 눕혔다. –

관련 문제