복붙노트

json_encode가 NULL을 반환하고 있습니까?

PHP

json_encode가 NULL을 반환하고 있습니까?

어떤 이유로 "item"항목이 다음 코드와 함께 NULL을 반환합니다.

<?php
include('db.php');

$result = mysql_query('SELECT * FROM `staff` ORDER BY `id` DESC LIMIT 2') or die(mysql_error());
$rows = array();
while($row = mysql_fetch_assoc($result)){
    $rows[] = $row;
}

echo json_encode($rows);
?>

내 데이터베이스의 스키마는 다음과 같습니다.

CREATE TABLE `staff` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` longtext COLLATE utf8_unicode_ci,
  `description` longtext COLLATE utf8_unicode_ci,
  `icon` longtext COLLATE utf8_unicode_ci,
  `date` longtext COLLATE utf8_unicode_ci,
  `company` longtext COLLATE utf8_unicode_ci,
  `companyurl` longtext COLLATE utf8_unicode_ci,
  `appurl` longtext COLLATE utf8_unicode_ci,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

다음은 페이지에 울리는 내용입니다.

[{"id":"4","name":"Noter 2","description":null,"icon":"http:\/\/images.apple.com\/webapps\/productivity\/images\/noter2_20091223182720-thumb.jpg","date":"1262032317","company":"dBelement, LLC","companyurl":"http:\/\/dbelement.com\/","appurl":"http:\/\/noter2.dbelement.com"},{"id":"3","name":"Noter 2","description":null,"icon":"http:\/\/images.apple.com\/webapps\/productivity\/images\/noter2_20091223182720-thumb.jpg","date":"1262032317","company":"dBelement, LLC","companyurl":"http:\/\/dbelement.com\/","appurl":"http:\/\/noter2.dbelement.com"}]

어떤 아이디어?

해결법

  1. ==============================

    1.나는 당신이 utf8이 아닌 인코딩으로 데이터를 검색하고 있다고 확신한다 : SELECT 쿼리 전에 mysql_query ( 'SET CHARACTER SET utf8')를 넣으십시오.

    나는 당신이 utf8이 아닌 인코딩으로 데이터를 검색하고 있다고 확신한다 : SELECT 쿼리 전에 mysql_query ( 'SET CHARACTER SET utf8')를 넣으십시오.

  2. ==============================

    2.PHP 5.5 이상인 경우 json_last_error_msg ()를 사용하면 문제를 설명하는 문자열을 반환합니다.

    PHP 5.5 이상인 경우 json_last_error_msg ()를 사용하면 문제를 설명하는 문자열을 반환합니다.

    5.5가 아니고 5.3 이상일 경우 json_last_error ()를 사용하여 문제가 무엇인지 확인할 수 있습니다.

    함수의 설명서에서 문제를 식별하는 데 사용할 수있는 정수를 반환합니다. 현재 (2012.01.19) 식별자는 다음과 같습니다.

    0 = JSON_ERROR_NONE
    1 = JSON_ERROR_DEPTH
    2 = JSON_ERROR_STATE_MISMATCH
    3 = JSON_ERROR_CTRL_CHAR
    4 = JSON_ERROR_SYNTAX
    5 = JSON_ERROR_UTF8
    

    이는 이후 버전에서 변경 될 수 있으므로 설명서를 참조하는 것이 좋습니다.

    5.3 이하인 경우 운이 없으므로 오류가 무엇인지 물어볼 방법이 없습니다.

  3. ==============================

    3.ntd의 anwser는 내 문제를 해결하지 못했습니다. 같은 상황에있는 사람들을 위해, 나는이 오류를 어떻게 처리 했는가? 각 결과를 utf8_ 인코딩하십시오.

    ntd의 anwser는 내 문제를 해결하지 못했습니다. 같은 상황에있는 사람들을 위해, 나는이 오류를 어떻게 처리 했는가? 각 결과를 utf8_ 인코딩하십시오.

    while($row = mysql_fetch_assoc($result)){
        $rows[] = array_map('utf8_encode', $row);
    }
    

    희망이 도움이됩니다!

  4. ==============================

    4.몇 일 전 나는 1 개의 테이블에 동일한 문제가 있습니다.

    몇 일 전 나는 1 개의 테이블에 동일한 문제가 있습니다.

    첫째로 시도하십시오 :

    echo json_encode($rows);
    echo json_last_error();  // returns 5 ?
    

    마지막 줄에 5가 반환되면 데이터에 문제가있는 것입니다. 나도 알다시피, 당신의 테이블은 UTF-8이지만, 입력 된 데이터는 아닙니다. 예를 들어 입력은 txt 파일에 있었지만 어리석은 인코딩 (Win-1250 = CP1250)으로 Win 머신에서 생성되었으며이 데이터는 DB에 입력되었습니다.

    해결책? 새로운 데이터 (엑셀, 웹 페이지)를 찾고, PSPad (또는 다른 무엇이든)를 통해 소스 txt 파일을 편집하고, 인코딩을 UTF-8로 변경하고, 모든 행을 삭제 한 다음 원본에서 데이터를 가져옵니다. 구하다. DB에 입력하십시오.

    utf-8로 인코딩을 변경 한 다음 수동으로 모든 행을 변경할 수도 있습니다 (desc, ...와 같은 특수 문자가있는 열을 제공하십시오). 노예들에게 좋다 ...

  5. ==============================

    5.json_encode에 utf8로 인코딩 된 문자열을 전달해야합니다. 다음과 같이 utf8_encode 및 array_map () 함수를 사용할 수 있습니다.

    json_encode에 utf8로 인코딩 된 문자열을 전달해야합니다. 다음과 같이 utf8_encode 및 array_map () 함수를 사용할 수 있습니다.

    <?php
        $encoded_rows = array_map('utf8_encode', $rows);
        echo json_encode($encoded_rows);
    ?>
    
  6. ==============================

    6.아아 !! 이건 내 머리를 아프게 해. 이 같은 것을 시도해보십시오 ...

    아아 !! 이건 내 머리를 아프게 해. 이 같은 것을 시도해보십시오 ...

    <?php
    include('db.php');
    
    $result = mysql_query('SELECT `id`, `name`, `description`, `icon` FROM `staff` ORDER BY `id` DESC LIMIT 20') or die(mysql_error());
    $rows = array();
    while($row = mysql_fetch_assoc($result)){
        $rows[] = $row;
    }
    
    echo json_encode($rows);
    ?>
    

    이것이 json_encode에 실제로 문제가 있다면 루프의 본문을 다음과 같이 대체 할 것을 제안 할 수 있습니다.

    $rows[] = array_map('htmlentities',$row);
    

    Perhpas 거기에 몇 가지 특별한 문자가 있습니다.

  7. ==============================

    7.PHP.net에서 charset을 설정하는 방법은 다음과 같습니다.

    PHP.net에서 charset을 설정하는 방법은 다음과 같습니다.

    mysqli_set_charset ( 'utf8')

  8. ==============================

    8.PDO를 사용하는 모든 사람들에게 해결책은 ntd의 대답과 비슷합니다.

    PDO를 사용하는 모든 사람들에게 해결책은 ntd의 대답과 비슷합니다.

    PHP PDO :: __ 생성 페이지에서, 사용자 Kiipa의 코멘트 (live dot com) :

  9. ==============================

    9.나는 같은 문제가 있었고 해결책은 json_encode () 대신에 내 자신의 함수를 사용하는 것이었다.

    나는 같은 문제가 있었고 해결책은 json_encode () 대신에 내 자신의 함수를 사용하는 것이었다.

    echo '["' . implode('","', $row) . '"]';
    
  10. from https://stackoverflow.com/questions/1972006/json-encode-is-returning-null by cc-by-sa and MIT license