dedegg 2019-08-04 17:05 采纳率: 0%
浏览 342

json_decode出错,会php的高手告诉我错误的地方怎么写?谢谢

<?php
//$id = $_GET['id'];
$url="http://d532519556-1259225818.cos.ap-chengdu.myqcloud.com/92580.json";
$info=file_get_contents($url);
$address=json_decode($info,true);
if(empty($address)){ exit('接口返回address数据格式错误'); }
$json=$address["live"][0]["urllist"];
if(empty($json)){ exit('接口返回json数据格式错误'); }
echo $json;
//header('location:'.$address);
?>

抓取网址中内容的视频链接,如图:
图片说明
现在执行代码时候,报错“接口返回address数据格式错误”,但是不知道“$address=json_decode($info,true);”
这句哪里错误?请各位php高手告诉我怎么写?谢谢!

  • 写回答

1条回答 默认 最新

  • weixin_43867346 2019-08-09 17:08
    关注
    1. 网页编码不是UTF-8
    2. 解决方法: 先转换编码,替换一些特殊字符,在进行json解析.

      $url="http://d532519556-1259225818.cos.ap-chengdu.myqcloud.com/92580.json";
          $text = file_get_contents($url);
          define('UTF32_BIG_ENDIAN_BOM', chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));
          define('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));
          define('UTF16_BIG_ENDIAN_BOM', chr(0xFE) . chr(0xFF));
          define('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE));
          define('UTF8_BOM', chr(0xEF) . chr(0xBB) . chr(0xBF));
          $first2 = substr($text, 0, 2);
          $first3 = substr($text, 0, 3);
          $first4 = substr($text, 0, 3);
          $encodType = "";
          if (UTF8_BOM == $first3) {
              $encodType = 'UTF-8 BOM';
          } else if (UTF32_BIG_ENDIAN_BOM == $first4) {
              $encodType = 'UTF-32BE';
          } else if (UTF32_LITTLE_ENDIAN_BOM == $first4) {
              $encodType = 'UTF-32LE';
          } else if (UTF16_BIG_ENDIAN_BOM == $first2) {
              $encodType = 'UTF-16BE';
          } else if (UTF16_LITTLE_ENDIAN_BOM == $first2) {
              $encodType = 'UTF-16LE';
          }
      
          //下面的判断主要还是判断ANSI编码的·
          if ('' == $encodType) {
              //即默认创建的txt文本-ANSI编码的
              $content = iconv("GBK", "UTF-8", $text);
          } else if ('UTF-8 BOM' == $encodType) {
              //本来就是UTF-8不用转换
              $content = $text;
          } else {
              //其他的格式都转化为UTF-8就可以了
              $content = iconv($encodType, "UTF-8", $text);
          }
          $address=json_decode( preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $content), true );
          if(empty($address)){ exit('接口返回address数据格式错误'); }
          $json=$address["live"][0]["urllist"];
          if(empty($json)){ exit('接口返回json数据格式错误'); }
          echo $json;die;
      
    评论

    报告相同问题?

    悬赏问题

    • ¥15 请教一下simulink中S函数相关问题
    • ¥15 Hadoop中eclipse运行问题
    • ¥15 在二层网络中,掩码存在包含关系即可通信
    • ¥15 端口转发器解析失败不知道电脑设置了啥
    • ¥15 Latex算法流程图行号自定义
    • ¥15 关于#python#的问题:我在自己的电脑上运行起来总是报错,希望能给我一个详细的教程,(开发工具-github)
    • ¥40 基于51单片机实现球赛计分器功能
    • ¥15 cs2游戏画面卡住,应用程序sid与指挥者sid不匹配
    • ¥15 实验七:Pandas要有实验截图和代码
    • ¥15 TypeError: Make sure that the iterable only contains strings.