php json_encode () show null вместо текста

Я читаю из базы данных с некоторым текстом на иврите и пытаюсь json_encode его. если i print_r получат результаты:

 Array ( [0] => Array ( [value] => 88 [text] => כיתה א' [parent_id] => 1 [level] => 1 ) [1] => Array ( [value] => 89 [text] => כיתה ב' [parent_id] => 1 [level] => 1 ) [2] => Array ( [value] => 91 [text] => כיתה ג' [parent_id] => 1 [level] => 1 ) ) 

в то время как json_encode показывает:

 [{"value":"88","text":null,"parent_id":"1","level":"1"},{"value":"89","text":null,"parent_id":"1","level":"1"},{"value":"91","text":null,"parent_id":"1","level":"1"}] 

Я верю, что это потому, что мой текст из базы данных содержит метку ('). пробовал различную комбинацию stripslashes или real_escape_string, никому не помогли.

json_encode ожидает, что строки в данных будут закодированы как UTF-8.

Преобразуйте их в UTF-8, если они еще не были:

 $results = array_map(function($r) { $r['text'] = utf8_encode($r['text']); return $r; }, $results); echo json_encode($results); 

Лучшее и быстрое решение, которое я нашел, было в самом PHP-документе, Сэмом Барнумом

 $encodedArray = array_map(utf8_encode, $rawArray); 
 $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass ); $dbh->exec("SET CHARACTER SET utf8"); 

или

 $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass, array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") ); 

Попробуйте json_encode($string, JSON_UNESCAPED_UNICODE); (только для PHP v5.4.0 + – см. документы ).

 function change_null($d) { if (is_array($d)) { foreach ($d as $k => $v) { $d[$k] = change_null($v); } } else if(is_null($d)) { return ''; } return $d; } 

Эта рекурсивная функция изменит нулевые значения на «пустую строку». При вызове json_encode ($ your_array) в json_encode (change_null ($ your_array));

Один из самых простых способов – установить запрос CHARSET для MySQL. Если вы хотите установить одну и ту же кодировку для всех своих запросов, просто добавьте следующее в конфигурационный файл или файл подключения к базе данных.

 mysql_query('SET CHARACTER SET utf8'); 

Если вы просто хотите его по конкретным запросам, просто используйте это прямо перед выполнением своих запросов.