json_encode () : 인수에 잘못된 UTF-8 시퀀스가 있습니다.
json_encode()
데이터 utf8_general_ci
정렬 을 사용하여 MySQL 데이터베이스에서 가져온 데이터를 호출 하고 있습니다 . 문제는 일부 행에 정리할 수없는 이상한 데이터가 있다는 것입니다. 예를 들어 symbol �
에 도달 json_encode()
하면 json_encode(): Invalid UTF-8 sequence in argument
.
나는 해봤 utf8_encode()
와 utf8_decode()
도 함께, mb_check_encoding()
그것을 통해 얻고 혼란을 일으키는 유지하지만.
Mac에서 PHP 5.3.10 실행. 그래서 문제는-유효하지 않은 utf8 기호를 어떻게 정리하고 나머지 데이터를 유지하면 json_encoding()
작동합니까?
최신 정보. 이를 재현하는 방법은 다음과 같습니다.
echo json_encode(pack("H*" ,'c32e'));
쿼리에서 잘못된 문자 집합이 반환되어 문자열에 곱슬 아포스트로피와 같은 hi-ascii 문자가있을 때마다 json_encode가 null 필드를 반환하는 유사한 오류가 발생했습니다.
해결책은 다음을 추가하여 utf8로 제공되도록하는 것입니다.
mysql_set_charset('utf8');
mysql connect 문 뒤에.
기호가 Å
인 것처럼 보이지만 데이터가 공개되어서는 안되는 성으로 구성되어 있기 때문에 첫 글자 만 표시되고 단지 $lastname[0]
에 의해 수행 되었으므로 멀티 바이트 문자열에는 잘못되어 전체적인 번거 로움이 발생했습니다. 변경 mb_substr($lastname, 0, 1)
-매력처럼 작동합니다.
문제는이 문자가 UTF8이지만 json_encode가 올바르게 처리하지 않는다는 것입니다. 더 말하면 동일한 오류를 유발하는 다른 문자 목록 ( 유니 코드 문자 목록 참조)이 있으므로이 문자 (Å)를 제거해도 문제가 끝까지 해결되지는 않습니다.
우리가 사용한 것은 이러한 문자를 다음과 같은 html 엔티티로 변환하는 것입니다.
htmlentities( (string) $value, ENT_QUOTES, 'utf-8', FALSE);
MySQL에 대한 연결 문자 세트가 UTF-8인지 확인하십시오. 기본값은 종종 ISO-8859-1이며 MySQL 드라이버가 텍스트를 ISO-8859-1로 변환 함을 의미합니다.
mysql_set_charset , mysqli_set_charset 또는 쿼리를 사용하여 연결 문자 집합을 설정할 수 있습니다.SET NAMES 'utf-8'
이 코드를 사용하면 도움이 될 수 있습니다. 내 문제가 해결되었습니다!
mb_convert_encoding($post["post"],'UTF-8','UTF-8');
또는 그렇게
mb_convert_encoding($string,'UTF-8','UTF-8');
게시 한 기호는 끊어진 바이트 시퀀스에 대한 자리 표시 자 기호입니다. 기본적으로 실제 기호가 아니라 문자열의 오류입니다.
기호의 정확한 바이트 값은 무엇입니까? 맹목적으로 utf8_encode를 적용하는 것은 좋은 생각이 아닙니다. 먼저 바이트의 출처와 의미를 알아내는 것이 좋습니다.
php의 json_encode 함수를 사용할 때이 오류를 발생시키는 또 다른 이유는 유니 코드 문자가 소문자 \ u가 아니라 대문자 \ U 일 때입니다.
json_encode는 UTF-8 데이터에서만 작동합니다. 데이터가 UTF-8인지 확인해야합니다. 또는 iconv ()를 사용하여 결과를 json_encode ()에 공급하기 전에 UTF-8로 변환 할 수 있습니다.
업데이트 .. 다음과 같이 PDO 연결에 문자 집합을 지정하여이 문제를 해결했습니다.
"mysql : host = $ host; dbname = $ db; charset = utf8"
수신 된 모든 데이터는 나머지 코드에서 사용할 수 있도록 올바른 문자 세트에 있습니다.
I am very late but if some one working on SLIM to make rest api and getting same error can solve this problem by adding below line as:
<?php
// DbConnect.php file
class DbConnect
{
//Variable to store database link
private $con;
//Class constructor
function __construct()
{
}
//This method will connect to the database
function connect()
{
//Including the constants.php file to get the database constants
include_once dirname(__FILE__) . '/Constants.php';
//connecting to mysql database
$this->con = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
mysqli_set_charset($this->con, "utf8"); // add this line
//Checking if any error occured while connecting
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
//finally returning the connection link
return $this->con;
}
}
json_encode 전에 setLocale ( 'fr_FR.UTF8')을 사용하면 문제가 해결되었습니다.
참조 URL : https://stackoverflow.com/questions/10205722/json-encode-invalid-utf-8-sequence-in-argument
'developer tip' 카테고리의 다른 글
Predict() - Maybe I'm not understanding it (0) | 2020.12.24 |
---|---|
왼쪽의 텍스트 오버플로 줄임표 (0) | 2020.12.24 |
tmpfile ()의 경로 검색 (0) | 2020.12.24 |
Python 3.3 용 opencv 설치 (0) | 2020.12.24 |
C ++ 11에서 const 참조가 값에 의한 전달보다 나은 경우는 언제입니까? (0) | 2020.12.24 |