programing

json_encode(): 인수의 UTF-8 시퀀스가 잘못되었습니다.

lastmemo 2023. 2. 20. 23:53
반응형

json_encode(): 인수의 UTF-8 시퀀스가 잘못되었습니다.

전화드렸습니다json_encode()MySQL 데이터베이스에서 가져온 데이터에 대해utf8_general_ci대조.문제는 일부 행에 정리할 수 없는 이상한 데이터가 있다는 것입니다.예: 기호에 도달하면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가 늘 필드를 반환하는 유사한 오류가 발생했습니다.

이 솔루션은 다음 사항을 추가하여 utf8이 되도록 하는 것이었습니다.

mysql_set_charset('utf8');

mysql connect 문 뒤에 표시됩니다.

기호는 마치Å그러나 데이터는 공개되어서는 안 되는 성으로 구성되어 있기 때문에 첫 글자만 표시되었으며, 이는 단지 에 의해 수행되었습니다.$lastname[0]멀티바이트 스트링에 맞지 않아 모든 문제를 일으켰습니다.로 변경했습니다.mb_substr($lastname, 0, 1)- 마법처럼 작용합니다.

문제는 이 문자가 UTF8이지만 json_encode에서는 올바르게 처리되지 않는다는 것입니다.게다가 같은 에러를 트리거 하는 다른 문자 리스트(Unicode 문자 리스트 참조)가 있기 때문에, 이 문자(O)를 떼어내도 문제가 끝까지 수정되지 않습니다.

이러한 문자를 다음과 같은 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일 경우입니다.

json_encode는 UTF-8 데이터에서만 작동합니다.데이터가 UTF-8에 있는지 확인해야 합니다.또는 결과를 json_encode()에 보내기 전에 아이콘v()를 사용하여 UTF-8로 변환할 수 있습니다.

갱신되었습니다.PDO 접속의 charset을 다음과 같이 기술하여 이 문제를 해결했습니다.

"호스트=$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;
    }
}

set Locale('fr_FR')을 사용합니다.UTF8')를 사용하여 문제를 해결했습니다.

언급URL : https://stackoverflow.com/questions/10205722/json-encode-invalid-utf-8-sequence-in-argument

반응형