Json_encode에 백슬래시 추가: 수수께끼 풀기
JavaScript 영역에서 json_encode는 오랫동안 데이터를 JSON 형식으로 인코딩하는 신뢰할 수 있는 동맹자였습니다. . 그러나 일부 개발자는 json_encode가 출력에 백슬래시를 도입하는 예상치 못한 현상에 직면했습니다.
업로드 난제
이러한 사례 중 하나는 json_encode를 사용하여 JSON 데이터를 반환할 때 발생합니다. 파일 업로드. 다음 코드를 고려하십시오.
print_r($result); // Associative array $encoded_result = json_encode($result); // Valid JSON echo $encoded_result;
설명할 수 없는 백슬래시
개발자는 놀랍게도 결과 JSON에 원치 않는 백슬래시가 포함되어 있습니다.
{"logo_url":"http:\/\/mysite.com\/uploads\/gallery\/7f\/3b\/f65ab8165d_logo.jpeg","img_id":"54","feedback":{"message":"File uploaded","success":true}}
정확히 범인
초기 조사 결과 json_encode와 브라우저의 JSON 데이터 구문 분석 사이 어딘가에 백슬래시가 추가된 것으로 나타났습니다.
alert(data.toSource()); // Result: invalid JSON with added "status:200"
숨겨진 변수
정밀 조사 결과 예상치 못한 범인이 밝혀졌다. Plupload 바인드 이벤트.
uploader.bind('FileUploaded', function(up, file, data) { alert(data.toSource()); $('#' + file.id + " b").html("100%"); });
인기 파일 업로드 라이브러리인 Plupload가 반환된 데이터를 조작하고 "status:200" 속성을 추가하고 슬래시를 인코딩하는 것으로 나타났습니다.
해결책: 슬래시 탈출
원치 않는 것을 방지하려면 백슬래시, json_encode 함수 호출에 "JSON_UNESCAPED_SLASHES" 옵션을 포함하도록 코드가 수정되었습니다.
$encoded_result = json_encode($result, JSON_UNESCAPED_SLASHES);
이 옵션은 슬래시 이스케이프를 효과적으로 비활성화하여 원하는 JSON 출력을 얻습니다.
{"logo_url":"http://mysite.com/uploads/gallery/7f/3b/f65ab8165d_logo.jpeg","img_id":"54","feedback":{"message":"File uploaded","success":true}}
공개 진실
결론적으로 json_encode 출력에 백슬래시가 추가된 것은 Plupload 바인드 이벤트에 의한 의도하지 않은 데이터 조작으로 인한 것입니다. 개발자는 "JSON_UNESCAPED_SLASHES" 옵션을 통합하여 원치 않는 이스케이프 문자가 JSON 데이터를 방해하는 것을 방지할 수 있습니다.
위 내용은 `json_encode`가 백슬래시를 추가하는 이유는 무엇이며 이를 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!