탈출 디코딩 : PHP를 사용하여 JSON의 슬래시 및 특수 캐릭터 처리
PHP의 JSON 슬래시 및 특수 문자를 올바르게 처리하려면 탈출 메커니즘을 이해하고 적절한 옵션을 사용해야합니다. 1. 출력에 표시되는 추가 백 슬래시는 합법적 인 JSON 형식에 필요하며 구문 분석 후 정상으로 돌아갑니다. 2. JSON_UNESCAPED_SLASHES를 사용하여 슬래시가 탈출되지 않아 URL을 더 명확하게합니다. 3. 4. 입력이 UTF-8 인코딩 및 설정 헤더인지 확인하십시오 ( 'Content-Type : Application/JSON; charset = utf-8'); 5. 백 슬래시를 수동으로 추가하지 않으면 json_encode ()에 의해 자동으로 처리되어야합니다. 6. 오류가 발생하면 JSON_LAST_ERROR ()를 통한 문제 해결. 일반적인 문제에는 NOTF-8 문자열, 원형 참조 또는 자원 유형이 포함됩니다. 7. 정확성을 보장하기 위해 항상 JavaScript 및 기타 환경에서 JSON 출력의 구문 분석 결과를 확인하십시오. 결국, 당신은 json_encode ()를 신뢰하고 플래그 비트와 함께 출력을 최적화해야합니다.
PHP에서 JSON과 함께 작업 할 때는 슬래시 및 특수 문자를 올바르게 처리하는 것이 잔인합니다. 특히 사용자 입력, 파일 경로 또는 따옴표, 백 슬래시 또는 제어 문자가 포함 된 컨텐츠를 처리 할 때는 잔인합니다. 일반적인 Pain Point 개발자가 직면 한 것은 JSON 출력에서 예상치 못한 탈출 ( \/
또는 \\
) 또는 에스코지가없는 문자로 인한 오류를 구문 분석합니다. PHP가 이러한 사례를 처리하는 방법과 제대로 관리하는 방법을 세분화합시다.

JSON을 피하는 규칙을 이해합니다
JSON은 어떤 캐릭터를 탈출 해야하는지에 대한 엄격한 규칙을 가지고 있습니다.
- 이중 인용문 (
"
) →\"
- 백 슬래시 (
\
) →\\
- 제어 문자 (Newline
\n
, Tab\t
등) →\n
,\t
등 - 전방 슬래시 (
/
) → 선택 사항 :\/
(HTML 스크립트 태그를 닫는 데 사용하지만 필요하지 않음)
PHP의 json_encode()
함수는 JSON 사양에 따라 탈출 해야하는 문자를 자동으로 이스케이프합니다. 그러나 이것은 때때로 혼란을 초래할 수 있습니다. 특히 여분의 백 슬래시를 볼 때.

여분의 백 슬래시가있는 이유는 무엇입니까? ( \\
, \"
)
출력에서 이중 배송 또는 탈출 된 인용문이 보이면 이러한 이유 중 하나 때문일 수 있습니다.
- 실제 JSON 출력이 아니라 RAW PHP 문자열을보고 있습니다 .
- 출력은 HTML 또는 JavaScript에 의해 처리되고 있으며 , 이는 백 슬래시를 다르게 해석 할 수 있습니다.
- Magic Quotes (감가 상승) - 현대 PHP의 문제는 아니지만 배제 할 가치가 있습니다.
예:

$ data = [ 'path'=> 'c : \\ xampp \\ htdocs', 'desc'=> '그는 "Hello"'라고 말했다]; echo json_encode ($ data);
산출:
{ "Path": "C : \\\\ Xampp \\\\\ htdocs", "desc": "그는 \"hello \ ""} 말했다.
이것은 올바른 JSON입니다. 각 백 슬래시는 탈출됩니다 ( \\
는 문자열에서 \\\\
됩니다 \"
.
JavaScript 또는 다른 JSON 디코더에 의해 구문 분석되면 다음이됩니다.
C : \ xampp \ htdocs 그는 "안녕하세요"라고 말했습니다.
따라서 여분의 슬래시는 버그가 아닙니다. 유효한 JSON에는 필요합니다.
PHP에서 JSON 인코딩 옵션 사용
PHP는 json_encode()
동작 방식을 제어하기위한 몇 가지 플래그를 제공합니다.
json_encode ($ data, json_unescaped_slashes | json_unescaped_unicode | json_unescaped_slashes);
일반적인 유용한 플래그 :
-
JSON_UNESCAPED_SLASHES
-방지</script>
-스타일 탈출 :/
as/
, not\/
-
JSON_UNESCAPED_UNICODE
\uXXXX
대신 utf-8 숯을 직접 출력합니다 -
JSON_HEX_QUOT
- 인용문을\u0022
로 이스케이프합니다 (드물게 필요하지 않음) -
JSON_PRETTY_PRINT
- 출력으로 출력을 읽을 수 있습니다
예:
$ data = [ 'url'=> 'https://example.com', 'message'=> 'hi/hello']; echo json_encode ($ data); // { "url": "https : \/\/example.com", "message": "hi \/hello"} echo json_encode ($ data, json_unescaped_slashes); // { "url": "https://example.com", "message": "hi/hello"}
HTML 스크립트 태그 안전이 필요하지 않고 클리너 URL을 원한다면 JSON_UNESCAPED_SLASHES
사용하십시오.
사용자 입력 및 특수 문자 처리
사용자 입력 (예 : 양식 또는 API)을 수락 할 때는 JSON을 인코딩하기 전에 항상 소독하고 검증하십시오.
$ userInput = $ _post [ 'comment']; // 인용문, Newlines, Emojis를 포함 할 수 있습니다 $ data = [ '댓글'=> $ userInput, '타임 스탬프'=> time () ]; // 이것은 따옴표, Newlines 및 UTF-8을 올바르게 처리합니다 echo json_encode ($ data, json_unescaped_unicode);
JSON_UNESCAPED_UNICODE
가 없으면 이모티콘 또는 비 ASCII 텍스트 (예 : É, World)가 \u
시퀀스가됩니다. 깃발을 사용하면 인간이 읽을 수 있습니다.
또한 PHP 스크립트가 UTF-8을 사용하는지 확인하십시오.
mb_internal_encoding ( 'utf-8'); 헤더 ( 'content-type : application/json; charset = utf-8');
JSON 오류 디버깅
json_encode()
가 실패하면 json_last_error()
사용하여 이유를 찾으십시오.
$ json = json_encode ($ data); if ($ json === false) { 스위치 (json_last_error ()) { 사례 json_error_utf8 : Echo "UTF-8 인코딩 오류"; 부서지다; 사례 json_error_recursion : 에코 "재귀 배열 또는 객체"; 부서지다; CASE json_error_unsupported_type : Echo "지원되지 않은 유형의 객체"; 부서지다; } }
일반적인 문제 :
- NONTF-8 문자열 (예 :
utf8_decode()
또는 레거시 인코딩의 예를 들어) - 물체/배열의 원형 참조
- 인코딩 된 자원 또는 폐쇄 (허용되지 않음)
요약 : 모범 사례
PHP를 사용하여 JSON의 슬래시 및 특수 문자를 처리합니다.
-
JSON_UNESCAPED_SLASHES
및JSON_UNESCAPED_UNICODE
와 같은 적절한 플래그와 함께json_encode()
사용하십시오. - ✅ 항상 문자열이 UTF-8 인코딩되어 있는지 확인하십시오
- ✅ 슬래시를 수동
json_encode()
추가하지 마십시오 - ✅ JavaScript 또는 다른 파서의 출력을 테스트하여 정확성을 확인합니다.
-
json_last_error()
사용하여 인코딩 오류를 확인하십시오.
핵심은 당신이 보는 여분의 백 슬래시가 종종 탈출 된 캐릭터가 문자열에 어떻게 나타나는지를 이해하는 것입니다. 그들은 구문 분석 할 때 올바르게 해결됩니다.
기본적으로 : json_encode()
신뢰하지만 클리너, 사용 가능한 출력을위한 올바른 옵션으로 조정하십시오.
위 내용은 탈출 디코딩 : PHP를 사용하여 JSON의 슬래시 및 특수 캐릭터 처리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

preg_quote()escapesregex-specialcharacters,includingbackslashesandthedelimiter,totreatthemasliterals;2.avoiddouble-escapingbypassingrawstrings(e.g.,'C:\path')withoutpre-escapedbackslashes;3.useforwardslashesinpathswhenpossibletoreducebackslashclutter

Heredoc은 \ n, \ t, \\, \ $와 같은 가변 보간 및 기본 탈출 시퀀스를 처리하지만 \ "또는 \ '는 \"또는 \'를 처리하지 않지만 nowdoc은 가변 보간 및 탈출 처리를 수행하지 않습니다. \ n 및 변수를 포함한 모든 내용은 문자 그대로 출력됩니다. \ n Nowdoc에서는 적용됩니다.

AlwaysecapeOutusingContext-specificmethods : htmlSpecialchars () forhtmlcontentandattributes, rawurlencode () forurls, andjson_en Code () withjson_hex_tag, json_hex_apos, json_hex_quot, andjson_unescaped_unicodeforjavaScript.2.usetemplatingEnginesliketwig, lara

Inbash, SinglequotestreatAllCharacterslerally whilewoblequoteVariableexpansionandlimitedescaping; inpythonandjavaScript, bloquoTeTyShandleEscapesThesame, with withreadeafectingreadabilityand andconience bddingddingquotes, sousesinglequote

HTMLSpecialchars ()는 XSS 공격에 대한 주요 방어선으로 특수 문자를 HTML 엔티티로 변환하여 브라우저에서 입력 한 컨텐츠가 실행 가능한 코드가 아닌 일반 텍스트로 취급되도록합니다. 1. 그것을 사용할 때는 취약점을 구문 분석하지 않도록 문자 인코딩 (예 : 'UTF-8')을 지정해야합니다. 2. ENT_QUOTES 플래그는 항상 속성 컨텍스트에서 주입을 방지하기 위해 단일 및 이중 인용문을 피할 수 있도록합니다. 3. 저장되지 않고 출력에서 탈출하고 데이터 고정화 및 반복 탈출을 피해야합니다. 4. 모든 XSS 만 방어하기 위해 의존 할 수는 없습니다. JavaScript 데이터를 처리하고 Rich Text에 htmlp를 사용하려면 urlencode (), json_encode ()와 함께 URL을 처리해야합니다.

SQL 주입 보호는 다중 바이트 인코딩을 처리하지 않으며 유한 문자를 쉽게 우회 할 수 있기 때문에 AddSlashes ()에 의존 할 수 없습니다. 전처리 명세서 (예 : PDO 또는 MySQLI에 대한 매개 변수화 된 쿼리)는 입력이 코드에 구문 분석되지 않도록 SQL 로직에서 데이터를 분리하는 데 사용해야합니다. 전처리를 사용할 수없는 경우 데이터베이스 별 탈출 기능 (예 : real_escape_string 및 올바른 문자 세트 설정), 식별자 화이트리스트 또는 따옴표 마크 랩핑, 정수 입력 캐스팅 및 기타 방법을 사용하여 계층 적 방어를 달성해야합니다.

SQL 이스케이프는 안전하지 않고 SQL 주입으로부터 보호되지 않기 때문에 AddSlashes ()를 피해야합니다. htmlspecialchars ()는 XSS 공격을 방지하기 위해 HTML 출력에 사용됩니다. mysqli_real_escape_string ()은 mysql 쿼리에서 문자열 탈출에 사용될 수 있지만, 전처리 문을 사용할 수없는 경우에만 최적의 옵션 일뿐입니다. 1. AddSlashes ()는 구식이며 안전하지 않으며 현대적인 응용 분야에서 SQL 탈출에 사용해서는 안됩니다. 2. XSS를 방지하기 위해 사용자 입력을 출력하고 HTML로 출력 할 때 HTMLSpecialchars ()를 사용해야합니다. 3. mysqli_real_escape_string (

BackslashesgomissinginPHPbecausetheyaretreatedasescapecharactersindouble-quotedstrings,sotofixthis:1.Usesinglequotesforliteralpathslike'C:\Users\John\Documents',2.Ordoublethebackslashesindoublequotesas"C:\\Users\\\\John\\Documents",3.Prefer
