JSON 데이터를 디코딩(Malformed UTF-8 characters, possibly incorrectly encoded)
"Malformed UTF-8 characters, possibly incorrectly encoded" 오류는 PHP가 JSON 데이터를 디코딩하려고 시도할 때,
그 데이터가 올바른 UTF-8 형식이 아니라고 판단했을 때 발생하는데 비 UTF-8 문자나 이진 데이터가 JSON 문자열에 포함되어 있을 때 일어난다.
웹에서 긁어서 복사해온 경우 2바이트로 처리 되거나 그런것들이 있는데 잘 보세요.
한글도 없는데 문제가 생기는 경우는
작은 따음표와 겹쳐서 비슷한 다른 문자를 사용하거나 그런 경우가 있습니다.
UTF-8 인코딩에 문제가 있는지 확인하기 위해, mb_check_encoding 함수를 사용해 볼 수 있다.
if (!mb_check_encoding($json, 'UTF-8')) {
echo 'The JSON string is not valid UTF-8';
} else {
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
echo 'JSON Error: ' . json_last_error_msg();
}
}
이 코드는 JSON 문자열이 UTF-8로 올바르게 인코딩되었는지 먼저 확인하고, 그 후 JSON 문자열을 디코딩합니다.
만약 JSON 문자열이 UTF-8로 올바르게 인코딩되지 않았다면, 'The JSON string is not valid UTF-8' 메시지를 출력합니다.
if (!mb_check_encoding($json, 'UTF-8')) {
echo 'The JSON string is not valid UTF-8';
} else {
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
echo 'JSON Error: ' . json_last_error_msg();
}
}