>  기사  >  백엔드 개발  >  `json_encode`가 백슬래시를 추가하는 이유는 무엇이며 이를 방지하려면 어떻게 해야 합니까?

`json_encode`가 백슬래시를 추가하는 이유는 무엇이며 이를 방지하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-12 04:36:01259검색

Why does `json_encode` add backslashes and how can I prevent it?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.