За последние 24 часа нас посетили 22345 программистов и 1100 роботов. Сейчас ищут 669 программистов ...

json decode.

Тема в разделе "PHP для новичков", создана пользователем Artur_hopf, 16 июн 2020.

  1. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Подскажите в чем может быть дело, так возвращает null:
    PHP:
    1. if (filter_var($url, FILTER_VALIDATE_URL) !== false)
    2. {
    3.     $file_headers = get_headers($url);
    4.  
    5.     if($file_headers[0] !== 'HTTP/1.1 404 Not Found')
    6.     {
    7.         $file = file_get_contents($url);
    8.         $data = json_decode($file);
    9.  
    10.         var_dump($data);  //NULL
    11.  
    12.     }
    13. }  
    А вот если выведу через echo $file. Потом просто скопирую что на экране и вставлю в переменную, то все хорошо:
    PHP:
    1. $str; //то что с экрана
    2. $data = json_decode($str);
    3. print_r($data);
    Если вывести header то там это:
    PHP:
    1.   0 => 'HTTP/1.1 200 OK',
    2.   1 => 'Content-Type: application/json; charset=utf-8',
    3.   2 => 'Server: Microsoft-IIS/10.0',
    4.   3 => 'X-Powered-By: ASP.NET',
    5.   4 => 'Date: Tue, 16 Jun 2020 11:09:52 GMT',
    6.   5 => 'Connection: close',
    7.   6 => 'Content-Length: 175412',
    8. )
    что то не сталкивался с этим.

    Если вывести через проверки
    PHP:
    1. json_decode($file);
    2.  
    3.     switch (json_last_error()) {
    4.         case JSON_ERROR_NONE:
    5.             echo ' - Ошибок нет';
    6.         break;
    7.         case JSON_ERROR_DEPTH:
    8.             echo ' - Достигнута максимальная глубина стека';
    9.         break;
    10.         case JSON_ERROR_STATE_MISMATCH:
    11.             echo ' - Некорректные разряды или несоответствие режимов';
    12.         break;
    13.         case JSON_ERROR_CTRL_CHAR:
    14.             echo ' - Некорректный управляющий символ';
    15.         break;
    16.         case JSON_ERROR_SYNTAX:
    17.             echo ' - Синтаксическая ошибка, некорректный JSON';
    18.         break;
    19.         case JSON_ERROR_UTF8:
    20.             echo ' - Некорректные символы UTF-8, возможно неверно закодирован';
    21.         break;
    22.         default:
    23.             echo ' - Неизвестная ошибка';
    24.         break;
    25.     }
    То будет Синтаксическая ошибка, некорректный JSON
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Нашел решение, по факту случайное. Опытные люди подскажите что это может быть.
    Хотел удалить первый символ:
    PHP:
    1. $file = file_get_contents($url);
    2. $str = substr($file, 1);
    3. echo $str;
    А вылезло вот что:
    Код (Text):
    1. ��[{
    А чтобы заработало написал так:
    PHP:
    1. $file = file_get_contents($url);
    2. $str = substr($file, 3);
    3. $data = json_decode( $str, true );
    4. var_dump($data);
    То есть удалил первые три символа. Объясните что там были за невидимые три символа? o_O
     
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    братан, php не врет, если пишут есть синтаксическая ошибка - так оно и есть...
    а все твои фокусы с echo и копиапстом просто ее лечат, убирая например какие-то непечатаемые знаки.
    Есть же море программ и сервисов для проверки json
    --- Добавлено ---
    UTF-8 witch BOM
     
    Artur_hopf нравится это.
  4. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @ADSoft теперь ясно ,вот же фигня какая=)