запрос php json: строка юникода json_decode

Я пытаюсь получить содержимое этого URL JSON:
http://www.der-postillion.de/ticker/newsticker2.php

Проблема, кажется, в том, что содержимое «текста» имеет Unicode внутри.

Каждый раз, когда я пытаюсь получить json_decode, он терпит неудачу с NULL … никогда раньше такой проблемы не было. всегда тянет json таким образом:

$news_url_postillion = 'http://www.der-postillion.de/ticker/newsticker2.php';
$file = file_get_contents($news_url_postillion, false, $context);
$data = json_decode($file, TRUE);

//debug
print_r(array($data));

$news_text = $data['tickers'];

//test
echo $news_text->text[0]; //echo first text element for test

foreach($news_text as $news){
$news_text_output = $news->{'text'};
echo 'Text:' . echo $news_text_output; . '<br>';
}

Кто-нибудь знает, что здесь не так? пытается часами работать с такими вещами, как:

header("Content-Type: text/json; charset=utf-8");

или же

$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Content: type=application/json\r\n" .
"Content-Type: text/html; charset=utf-8")
);

$context = stream_context_create($opts);

но не повезло 🙁

Спасибо за вашу помощь!

Источник json содержит некоторые нежелательные элементы, такие как символ спецификации при запуске json. Я не мог повлиять на источник JSON, поэтому решение walkingRed при условии поставить меня на правильный путь. Был нужен только utf8_decode, потому что его код только для английского языка без специальных символов.

Мое рабочее решение для анализа и вывода JSON:

<?php
// Postillion Newsticker Parser
$news_url_postillion = 'http://www.der-postillion.de/ticker/newsticker2.php';
$json_newsDataPostillion = file_get_contents($news_url_postillion);

// Fix the strange json source BOM stuff
$obj_newsDataPostillion = json_decode(preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $json_newsDataPostillion), true);

//DEBUG
//print_r($result);

foreach($obj_newsDataPostillion['tickers'] as $newsDataPostillion){
$newsDataPostillion_text = utf8_decode($newsDataPostillion['text']);
echo 'Text:' . $newsDataPostillion_text . '<br>';
};
?>

3

Решение

Я сделал некоторый поиск и получил это:

$result = json_decode(preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $file), true);

Оригинальный пост

2

Другие решения

BOM! В начале документа, на который вы ссылаетесь, есть символ спецификации, и вам нужно удалить его, прежде чем пытаться декодировать его содержимое.

Вы можете видеть это, например. если вы скачаете этот json с помощью wget и отобразите его с меньшим количеством.

0

По вопросам рекламы [email protected]