(PHP) 사용자가 업로드하는 JSON 텍스트를 디코딩하기

엽토군·2021년 11월 12일
1

1분 코드 스니펫

목록 보기
5/9

tl;dr

다음 코드가 까닭 없이 오류를 발생시키는 것처럼 보인다면:

$bar = json_decode($foo);

다음 코드로 시도해 보라.

$bar = json_decode(
    preg_replace('/\r|\n/', '\n',
        preg_replace('/\t/', '\t',
            trim($foo)
        )
    )
);

해설

사용자 JSON 입력에는 줄바꿈 문자, 탭 문자가 당연히 들어갈 수 있다. PHP의 json_decode()는 이 처리를 성공적으로 실패한다.

소프트웨어 라이센스 문제로 인해 이전 json 모듈이 jsond 모듈로 교체되었습니다. (중략) 지금은 변경 사항이나 해결 방법에 대한 정보가 많지 않지만 문자열 [\0x00-\0x1F] 안의 모든 제어 문자 가 오류를 발생시키는 것을 볼 수 있습니다 . 불행히도 이 동작은 JSON 표준에 따라 올바른 것 같습니다 . 출처

그래서, 사용자 입력 어딘가가 진짜로 줄바꿈을 하고 있다면 그 줄바꿈은 \n으로 바뀌어야 하며, 실제로 탭이 들어가 있다면 그 탭은 \t라는 표기로 대체되어야 한다. 위 코드가 하는 일은 딱 그것뿐이다.

뭐 애초에 사용자 입력이라는 것 자체가 위생 처리와 정규화를 꼭 해야 하는 대상이니... 너무 띠껍게 생각하지는 말자.

profile
4년차 PHP 개발자입니다.

0개의 댓글