php json_encode () показывает ноль вместо текста - PullRequest
11 голосов
/ 16 ноября 2011

Я читаю из базы данных с текстом на иврите и пытаюсь json_encode это. если я 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"}]

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

Ответы [ 6 ]

20 голосов
/ 16 ноября 2011

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

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

$results = array_map(function($r) {
  $r['text'] = utf8_encode($r['text']);
  return $r;
}, $results);
echo json_encode($results);
2 голосов
/ 12 декабря 2013

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

$encodedArray = array_map(utf8_encode, $rawArray);
1 голос
/ 20 февраля 2015
$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")
              );
0 голосов
/ 15 августа 2017

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

mysql_query('SET CHARACTER SET utf8');

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

0 голосов
/ 18 апреля 2017
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));

0 голосов
/ 16 ноября 2011

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

...