【问题标题】:Just Grab image URL on json with php只需使用 php 在 json 上获取图像 URL
【发布时间】:2018-03-30 09:46:02
【问题描述】:

我有一些这样的 Json 响应。

{
    "status": "active",
    "city": "depok",
    "name": "Alternatif Cibubur",
    "lat": -6.376057,
    "thumbnail_html": "\n\n\n\n\n\n<div class=\"cam-thumb\">\n  \n    \n      <a href=\"/cam/248/alternatif-cibubur/\">\n        <img src=\"https://media.lewatmana.com/cam/tbicibubur/248/snapshot20180330_163142M-thumb.jpg\" class=\"cam-thumb-img\">\n      </a>\n    \n  \n\n  <div class=\"cam-thumb-info\">\n    <p class=\"cam-name\"><a href=\"/cam/248/alternatif-cibubur/\">Alternatif Cibubur</a></p>\n  </div>\n</div>\n\n\n",
    "lon": 106.900786,
    "id": 248,
    "description": "Kamera berada di jalan Alternatif Cibubur, arah menjauhi kamera menuju Cibubur Junction / Tol Jakarta, sebaliknya menuju Kranggan / Cileungsi / Bogor."
  }

如您所见,在“thumbnail_html”路径中,附加了一个图片网址

{
    "status": "active",
    "city": "depok",
    "name": "Alternatif Cibubur",
    "lat": -6.376057,
    "thumbnail_html": "https://media.lewatmana.com/cam/tbicibubur/248/snapshot20180330_163142M-thumb.jpg",
    "lon": 106.900786,
    "id": 248,
    "description": "Kamera berada di jalan Alternatif Cibubur, arah menjauhi kamera menuju Cibubur Junction / Tol Jakarta, sebaliknya menuju Kranggan / Cileungsi / Bogor."
  }

其实我也试过用str_replace和preg_replace语句,但是语句太复杂太长了,有没有更简单的方法来获取图片的URL?

【问题讨论】:

  • 您是否尝试过使用以 http 开头并以 .jpg` 结尾的正则表达式?
  • 好的!我会试试的,谢谢 Rick 和 kdoteu

标签: php json replace preg-replace str-replace


【解决方案1】:

这个正则表达式可以工作:

$subject = '\n\n\n\n\n\n<div class=\"cam-thumb\">\n  \n    \n      <a href=\"/cam/248/alternatif-cibubur/\">\n        <img src=\"https://media.lewatmana.com/cam/tbicibubur/248/snapshot20180330_163142M-thumb.jpg\" class=\"cam-thumb-img\">\n      </a>\n    \n  \n\n  <div class=\"cam-thumb-info\">\n    <p class=\"cam-name\"><a href=\"/cam/248/alternatif-cibubur/\">Alternatif Cibubur</a></p>\n  </div>\n</div>\n\n\n';
$matches = [];
preg_match('/(https?:\/\/.*\.(?:png|jpg))/i', $subject, $matches);

var_dump($matches);

【讨论】:

    【解决方案2】:

    试试这个

    <?php
    $string = '\n\n\n\n\n\n<div class="cam-thumb">\n  \n    \n      <a href="/cam/248/alternatif-cibubur/">\n        <img src="https://media.lewatmana.com/cam/tbicibubur/248/snapshot20180330_163142M-thumb.jpg" class="cam-thumb-img">\n      </a>\n    \n  \n\n  <div class="cam-thumb-info">\n    <p class="cam-name"><a href="/cam/248/alternatif-cibubur/">Alternatif Cibubur</a></p>\n 
    </div>\n</div>\n\n\n';
    
    preg_match_all('#\bhttps?://[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#', $string, $match);
    
    echo "<pre>";
    print_r($match[0]); 
    echo "</pre>";
    

    输出:

    Array
    (
        [0] => https://media.lewatmana.com/cam/tbicibubur/248/snapshot20180330_163142M-thumb.jpg
    )
    

    【讨论】:

      【解决方案3】:

      not recommended to parse html with regex

      你可以使用DOMDocument:

      $data = <<<'DATA'
      {
          "status": "active",
          "city": "depok",
          "name": "Alternatif Cibubur",
          "lat": -6.376057,
          "thumbnail_html": "\n\n\n\n\n\n<div class=\"cam-thumb\">\n  \n    \n      <a href=\"/cam/248/alternatif-cibubur/\">\n        <img src=\"https://media.lewatmana.com/cam/tbicibubur/248/snapshot20180330_163142M-thumb.jpg\" class=\"cam-thumb-img\">\n      </a>\n    \n  \n\n  <div class=\"cam-thumb-info\">\n    <p class=\"cam-name\"><a href=\"/cam/248/alternatif-cibubur/\">Alternatif Cibubur</a></p>\n  </div>\n</div>\n\n\n",
          "lon": 106.900786,
          "id": 248,
          "description": "Kamera berada di jalan Alternatif Cibubur, arah menjauhi kamera menuju Cibubur Junction / Tol Jakarta, sebaliknya menuju Kranggan / Cileungsi / Bogor."
        }
      DATA;
      
      $obj = json_decode($data);
      $dom = new DOMDocument();
      $dom->loadHTML($obj->thumbnail_html);
      $obj = $dom->getElementsByTagName('img');
      echo $dom->getElementsByTagName('img')->item(0)->getAttribute("src");
      

      这会给你:

      https://media.lewatmana.com/cam/tbicibubur/248/snapshot20180330_163142M-thumb.jpg
      

      Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-12
        • 2013-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-21
        相关资源
        最近更新 更多