2011-09-14 3 views
2

JQuery와 PHP를 사용하여 JSON 파일의 변경 사항을 저장하려고하는데 JSON을 저장할 때 PHP 스크립트가 문자를 이스케이프 처리하고있는 것처럼 보입니다. 다시 읽으십시오.파일에 쓸 때 PHP가 JSON 문자열을 이스케이프 처리하지 못하도록

나는 다음과 같은 코드를 사용하여 save.php하는 JSON 객체 ('가족')을 통과 해요 :

function saveChanges() { 
    $.ajax({ 
     type: "POST", 
     url: "save.php", 
     data: { 
      data: JSON.stringify(family) 
     }, 


     success: function(msg){ 
      console.log(data); 
    } 
}); 
    } 

그런 다음 save.php 다음 코드

와 armstrong.json 할 수있는 JSON 데이터를 씁니다

{\"title\":\"Armstrong\",\"description\":\"The Armstrong Family\",\"patriarchID\":\"id1\",\"latestID\":8,\"members\":[{\"name\":\"Grandad\",\"id\":\"id1\",\"children\":[\"id2\",\"id3\"]},{\"name\":\"Dad\",\"id\":\"id2\",\"children\":[\"id4\",\"id5\",\"id6\",\"id7\"]},{\"name\":\"Uncle\",\"id\":\"id3\"},{\"name\":\"Child\",\"id\":\"id4\"},{\"name\":\"Child\",\"id\":\"id5\"},{\"name\":\"Child\",\"id\":\"id6\"},{\"name\":\"Child\",\"id\":\"id7\"},{\"name\":\"a\",\"id\":\"id8\"}]}{\"title\":\"Armstrong\",\"description\":\"The Armstrong Family\",\"patriarchID\":\"id1\",\"latestID\":9,\"members\":[{\"name\":\"Grandad\",\"id\":\"id1\",\"children\":[\"id2\",\"id3\"]},{\"name\":\"Dad\",\"id\":\"id2\",\"children\":[\"id4\",\"id5\",\"id6\",\"id7\"]},{\"name\":\"Uncle\",\"id\":\"id3\"},{\"name\":\"Child\",\"id\":\"id4\"},{\"name\":\"Child\",\"id\":\"id5\"},{\"name\":\"Child\",\"id\":\"id6\"},{\"name\":\"Child\",\"id\":\"id7\"},{\"name\":\"a\",\"id\":\"id8\"},{\"name\":\"a\",\"id\":\"id9\"}]}{\"title\":\"Armstrong\",\"description\":\"The Armstrong Family\",\"patriarchID\":\"id1\",\"latestID\":10,\"members\":[{\"name\":\"Grandad\",\"id\":\"id1\",\"children\":[\"id2\",\"id3\"]},{\"name\":\"Dad\",\"id\":\"id2\",\"children\":[\"id4\",\"id5\",\"id6\",\"id7\"]},{\"name\":\"Uncle\",\"id\":\"id3\"},{\"name\":\"Child\",\"id\":\"id4\"},{\"name\":\"Child\",\"id\":\"id5\"},{\"name\":\"Child\",\"id\":\"id6\"},{\"name\":\"Child\",\"id\":\"id7\"},{\"name\":\"a\",\"id\":\"id8\"},{\"name\":\"a\",\"id\":\"id9\"},{\"name\":\"a\",\"id\":\"id10\"}]} 

어떤 아이디어가 나는 그것이 escapi 막을 수있는 방법을 다음과 같이 파일이 쓰여되고있다 그러나

<?php 

$data = $_POST["data"]; 
echo $data; 
$filename = 'armstrong.json'; 

if (is_writable($filename)) { 
    if (!$handle = fopen($filename, "w")) { 
     echo "Cannot open file ($filename)"; 
     exit; 
    } 

    if (fwrite($handle, parse_json($data)) === FALSE) { 
     echo "Cannot write to file ($filename)"; 
     exit; 
    } 
echo "Success, wrote ($data) to file ($filename)"; 

fclose($handle); 

} else { 
    echo "The file $filename is not writable"; 
} 

?> 

문자를? 이

{ 
      "title"   : "Armstrong", 
      "description" : "The Armstrong Family", 
      "patriarchID" : "id1", 
      "latestID"  : 7, 
      "members"  : [ 
       { 
        "name" : "Grandad", 
        "id" : "id1", 
        "children": ["id2","id3"] 
       }, 
       { 
        "name" : "Dad", 
        "id":  "id2", 
        "children": ["id4","id5","id6","id7"] 
       }, 
       { 
        "name" : "Uncle", 
        "id" : "id3" 
       }, 
       { 
        "name" : "Child", 
        "id" : "id4" 
       }, 
       { 
        "name" : "Child", 
        "id" : "id5" 
       }, 
       { 
        "name" : "Child", 
        "id" : "id6" 
       }, 
       { 
        "name" : "Child", 
        "id" : "id7" 
       } 

      ] 
} 
+1

으로는 fopen /에 fwrite/FCLOSE 대체 할 수있는 것은 관련 같습니다 http://stackoverflow.com/questions/7417987/slash-appended-to-all- 내 게시물/7418026 # 7418026 – arnaud576875

+0

PHP 코드에서'parse_json'이란 무엇입니까? 그건 PHP 함수 내장 된 아니에요 ... – Paulpro

답변

4

은 어쩌면 당신은 magic quotes이 php.ini 파일에 설정 한 것처럼 JSON 파일이 보일 것입니다. 너는 그들을 꺼야한다. 이것은 도주를 설명 할 것입니다

편집 - 당신이 마법 따옴표에 관하여 더 많은 것을 알 필요가있는 경우에 here를 읽으십시오. php.ini에 접근 할 수 없다면 마법 따옴표가 나쁘다.

+0

재미있는 소리, 어떻게 그럴 것이고, 그것은 다른 것에 영향을 미칠까요? –

+0

당신이 마술 따옴표에 관하여 더 많은 것을 알 필요가있는 경우에 [여기에서 읽으십시오] http://www.php.net/manual/en/security.magicquotes.php. 당신이 php.ini 파일에 접근 할 수 있다면, 마술 따옴표가 나쁘다. –

+0

그건 문제가 된 것 같다. 그것들을 들여다 보아, 고마워! –

관련 문제