PHP json 인코딩 - 잘못된 형식의 UTF-8 문자, 잘못 인코딩되었을 수 있습니다.
사용하고 있다json_encode($data)
러시아 문자를 포함하는 필드가 있습니다.
이거 썼어mb_detect_encoding()
UTF-8 이라고 표시됩니다.
json encode는 "filters▒"와 같은 문자가 잘못되어 실패한 것 같습니다.나는 많은 것을 시도했다.utf8_encode
이 에러는 통과하지만 데이터가 더 이상 정확해 보이지 않습니다.
이 문제를 해결하려면 어떻게 해야 합니까?
대부분의 문자가 utf8 문자이지만 utf8 문자 이외의 문자가 포함되어 있으면 문제가 발생합니다.그러면 utf8 이외의 문자가 모두 삭제되고 이제 작동합니다.
$data['name'] = mb_convert_encoding($data['name'], 'UTF-8', 'UTF-8');
JSON 형식으로 인코딩할 다차원 배열이 있는 경우 다음 함수를 사용할 수 있습니다.
JSON_ERROR_UTF8이 발생한 경우:
$encoded = json_encode( utf8ize( $responseForJS ) );
아래 함수는 어레이 데이터를 재귀적으로 인코딩하는 데 사용됩니다.
/* Use it for json_encode some corrupt UTF-8 chars
* useful for = malformed utf-8 characters possibly incorrectly encoded by json_encode
*/
function utf8ize( $mixed ) {
if (is_array($mixed)) {
foreach ($mixed as $key => $value) {
$mixed[$key] = utf8ize($value);
}
} elseif (is_string($mixed)) {
return mb_convert_encoding($mixed, "UTF-8", "UTF-8");
}
return $mixed;
}
반드시 utf8로 charset iso를 사용하여 Pdo 개체를 시작하십시오.이렇게 하면 이 문제가 해결됩니다.재활용되는 춤은 피할 수 있습니다.
$pdo = new PDO("mysql:host=localhost;dbname=mybase;charset=utf8", 'user', 'password');
php 7.2에서는 두 가지 옵션을 사용하여 json_encode에서 비활성 UTF-8을 관리할 수 있습니다.
https://www.php.net/manual/en/function.json-encode
json_encode($text, JSON_INVALID_UTF8_IGNORE);
또는
json_encode($text, JSON_INVALID_UTF8_SUBSTITUTE);
pdo connection charset=utf8을 pdo connection의 아래 행과 같이 추가합니다.
$pdo = new PDO("mysql:host=localhost;dbname=mybase;charset=utf8", 'user', 'password');
이것이 너에게 도움이 되기를 바란다.
JSON 인코딩 전에 HTML 엔티티를 제거합니다.나는 사용했다html_entity_decode()
문제가 해결되었습니다.
$json = html_entity_decode($source);
$data = json_decode($json,true);
결과 세트에 UUID가 있습니까?이 경우 다음 데이터베이스 플래그가 도움이 됩니다.
PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER => true
예를 들어 데이터가 데이터베이스에 올바르게 인코딩되어 있는 경우 문자열 처리에 mb_* 함수를 json_encode 전에 사용하십시오.기판이나 strlen과 같은 함수는 utf8mb4에서 잘 작동하지 않으며 텍스트를 잘라내고 잘못된 형식의 UTF8을 남길 수 있습니다.
이게 좀 오래된 주제인 건 알지만, 제게는 그게 필요했어요.나는 단지 'jayashan pererera'라는 답을 수정해야 했다.
//...code
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
for ($i=0; $i < sizeof($result) ; $i++) {
$tempCnpj = $result[$i]['CNPJ'];
$tempFornecedor = json_encode(html_entity_decode($result[$i]['Nome_fornecedor']),true) ;
$tempData = $result[$i]['efetivado_data'];
$tempNota = $result[$i]['valor_nota'];
$arrResposta[$i] = ["Status"=>"true", "Cnpj"=>"$tempCnpj", "Fornecedor"=>$tempFornecedor, "Data"=>"$tempData", "Nota"=>"$tempNota" ];
}
echo json_encode($arrResposta);
.js는 사용할 수 없습니다.
obj = JSON.parse(msg);
언급URL : https://stackoverflow.com/questions/46305169/php-json-encode-malformed-utf-8-characters-possibly-incorrectly-encoded
'programing' 카테고리의 다른 글
React에서 JSON의 데이터 해석JS (0) | 2023.02.14 |
---|---|
SQL 오류: ORA-00933:SQL 명령이 올바르게 종료되지 않음 (0) | 2023.02.14 |
ODP를 실행합니다.NET에 Oracle Client 설치 필요 (0) | 2023.02.14 |
기본 키 변경 (0) | 2023.02.14 |
ng-click이 ng-blur 이벤트보다 우선하도록 강제하려면 어떻게 해야 합니까? (0) | 2023.02.14 |