json_encode가 NULL을 반환하고 있습니까?
PHPjson_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.나는 당신이 utf8이 아닌 인코딩으로 데이터를 검색하고 있다고 확신한다 : SELECT 쿼리 전에 mysql_query ( 'SET CHARACTER SET utf8')를 넣으십시오.
나는 당신이 utf8이 아닌 인코딩으로 데이터를 검색하고 있다고 확신한다 : SELECT 쿼리 전에 mysql_query ( 'SET CHARACTER SET utf8')를 넣으십시오.
-
==============================
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.ntd의 anwser는 내 문제를 해결하지 못했습니다. 같은 상황에있는 사람들을 위해, 나는이 오류를 어떻게 처리 했는가? 각 결과를 utf8_ 인코딩하십시오.
ntd의 anwser는 내 문제를 해결하지 못했습니다. 같은 상황에있는 사람들을 위해, 나는이 오류를 어떻게 처리 했는가? 각 결과를 utf8_ 인코딩하십시오.
while($row = mysql_fetch_assoc($result)){ $rows[] = array_map('utf8_encode', $row); }
희망이 도움이됩니다!
-
==============================
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.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.아아 !! 이건 내 머리를 아프게 해. 이 같은 것을 시도해보십시오 ...
아아 !! 이건 내 머리를 아프게 해. 이 같은 것을 시도해보십시오 ...
<?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.PHP.net에서 charset을 설정하는 방법은 다음과 같습니다.
PHP.net에서 charset을 설정하는 방법은 다음과 같습니다.
mysqli_set_charset ( 'utf8')
-
==============================
8.PDO를 사용하는 모든 사람들에게 해결책은 ntd의 대답과 비슷합니다.
PDO를 사용하는 모든 사람들에게 해결책은 ntd의 대답과 비슷합니다.
PHP PDO :: __ 생성 페이지에서, 사용자 Kiipa의 코멘트 (live dot com) :
-
==============================
9.나는 같은 문제가 있었고 해결책은 json_encode () 대신에 내 자신의 함수를 사용하는 것이었다.
나는 같은 문제가 있었고 해결책은 json_encode () 대신에 내 자신의 함수를 사용하는 것이었다.
echo '["' . implode('","', $row) . '"]';
from https://stackoverflow.com/questions/1972006/json-encode-is-returning-null by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
악센트 부호가있는 문자 교체 PHP (0) | 2018.09.11 |
---|---|
문자열에서 utf8 이외의 문자 제거 (0) | 2018.09.11 |
쿠키 제거 (0) | 2018.09.11 |
PHP - SSL 인증서 오류 : 로컬 발급자 인증서를 가져올 수 없습니다. (0) | 2018.09.11 |
isset와 array_key_exists의 차이점 (0) | 2018.09.11 |