php json 请求:json_decode unicode 字符串
php json request: json_decode unicode string
我尝试获取这个jsonURL的内容:
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 开头的 BOM 字符。我无法影响来源 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>';
};
?>
BOM!在您链接的文档的开头有一个 BOM 字符,您需要在尝试解码其内容之前将其删除。
你可以看到它,例如如果你用 wget 下载 json 并用 less 显示它。
我进行了一些搜索并得到了这个:
$result = json_decode(preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $file), true);
Original post
我尝试获取这个jsonURL的内容: 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 开头的 BOM 字符。我无法影响来源 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>';
};
?>
BOM!在您链接的文档的开头有一个 BOM 字符,您需要在尝试解码其内容之前将其删除。
你可以看到它,例如如果你用 wget 下载 json 并用 less 显示它。
我进行了一些搜索并得到了这个:
$result = json_decode(preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $file), true);
Original post