2012-04-28 4 views
2

서버에 일부 데이터를 저장하려고하지만 인코딩 문제가 발생했습니다.PHP로 utf-8로 인코딩 된 json을 .txt 파일로 저장하는 방법

나는 PHP로 내 개체를 보내고 방법이있다 (잘 작동하지만 난 contentType이 실제로 어떤 일을 생각하지 않습니다) :

$.post(
    'myfile.php', 
    { 
     contentType: "application/x-www-form-urlencoded;charset=utf-8", 
     data : myData 
    }, 
    function (data, textStatus, jqXHR){ 
     //some code here 
    } 
); 

다음 PHP에서 (myfile.php를)

<?php 
    header('Content-Type: text/html; charset=utf-8'); 

    $file = 'data/theData.txt'; //the file to edit 
    $current = file_get_contents($file); // Open the file to get existing content 
    $a2 = json_decode($current, true); 

    $data = $_POST['data']; //the data from the webpage 

    $res = array_merge_recursive($data, $a2); 

    $resJson = json_encode($res); 

    // Write the contents back to the file 
    file_put_contents($file, $resJson); 
?> 

본인은 파일의 원본 내용을 가져 와서 json을 디코딩하고 있습니다. 그런 다음 json에서 다시 인코딩하기 전에 웹 페이지에서 보낸 데이터와 결과를 병합하고 내용을 되돌려 놓습니다.

예상대로 작동합니다. 그러나 내 Jquery의 한 지점에서 보낸 데이터에는 "/ ö é ł Ż ę"와 같은 다양한 기호가 포함되어 있습니다.

파일을 저장하면 각 '/'앞에 이스케이프 문자 '\'가 있습니다 마찬가지로 'é'는 '\ u00e9'입니다.

어떻게 무시합니까? PHP에서 제대로 변환해야합니까, 아니면 $ .get ('data/theData.txt')를 가지고 올바른 형식으로 다시 변환해야할까요?

이 문제와 관련하여 불이 켜지는 경우 대단히 감사하기! 가난한 변수 이름을 용서하십시오.

+0

중복 가능성 (http://stackoverflow.com/questions/4409039/convert-a-json-into-a-utf-8-string) –

+0

@ IgnacioVazquez-Abrams : 나는 그것이 dup라고 생각하지 않는다. –

+0

$ _POST 값에 base64_encode()를 사용하여 우리에게 주십시오. 이렇게하면 우리에게 바이너리 안전 문자열이 보존되므로 utf8인지 여부를 알려줄 수 있습니다. – goat

답변

0

@ chalet16에서 제공하는 링크가 도움이되었지만 JSON_UNESCAPED_UNICODE가 작동하지 않는 경우이 작업을 수행합니다!

$myString = $json_encode($myObject); 
//After initially encoding to json there are escapes on all '/' and characters like ö é ł Ż ę 

//First unescape slashes: 
$myString = str_replace("\/","/",$myString); 

//Then escape double quotes 
$myString = str_replace('"','\\"',$myString); 

//And Finally: 
$myNewString = json_decode('"'.$myString.'"'); 
[A UTF-8 스트링으로 변환 JSON]의
0

당신은 PHP> = 5.4.0을 사용하는 경우로 json_encode 함수의 JSON_UNESCAPED_UNICODE 옵션을 사용할 수 있습니다. 자세한 내용은 php.net: json_encode를보고하십시오.

를 PHP < 들어 5.4.0, 같은 페이지에서 사용자가 작성한 노트에서이 작업을 수행하는 방법에 대한 의견이 있지만 올바르게 작동하는지 여부는 불확실합니다.

+0

감사합니다. @ chalet16 크게 도움이되었습니다. 안타깝게도 JSON_UNESCAPED_UNICODE 옵션이 저에게는 효과가 없었지만 다른 의견으로는 해결되었습니다. – Patrick

관련 문제