이 문제는 웹페이지에서 비동기식 AJAX를 사용하여 호출하기 위한 경우 발생합니다. JSON 타입의 포맷으로 PHP 문서를 만들어 API 형태로 불러오는데 파싱 에러가 발생한다면 아래의 문제일 가능성이 높습니다.
- 따옴표에 따른 문법 오류(홀따옴표, 쌍따옴표의 차이)
- 따옴표 앞에 escape 문자가 없는 경우
- nl2br을 사용하지 않았거나 사용하였음에도 변환되지 않은 경우
- JSON 문자에 띄어쓰기 코드 r n 등이 포함된 경우
위와 같은 이슈를 해결하기 위하여 대부분의 방법들을 사용해 보았으나 예외 케이스가 가끔씩 나타나는 현상이 발견되어 아래의 방법으로 최종 해결하였습니다.
! php의 json_encode() 함수를 사용하여 변환하기이 방법을 사용하면 텍스트를 감싸고 있는 따옴표를 제거한 후 함수 호출을 해야합니다. 예를들어
<?php
echo "'test' : '".json_encode('$str')."', ";
// 아래처럼 json_encode() 감싸는 따옴표 제거
echo "'test' : ".json_encode('$str'). ", ";
?>
이 방법을 사용하면 인코딩이 이루어지는데 AJAX에서 인코딩된 소스를 읽으면서 자동으로 디코딩됩니다.