如何使用PHP从指定JSON响应中提取图片URL?
用PHP从JSON响应中提取图片URL
这里有两种实用方法帮你提取目标图片URL,我会一步步拆解说明:
方法一:使用DOM解析器(推荐)
这种方法更健壮,能应对HTML结构的微小变动,比正则表达式靠谱得多,是处理HTML内容的标准做法。
步骤分解:
- 先把JSON字符串解析成PHP可操作的数组/对象
- 解码
thumbnail_html里的HTML实体(比如把<转成正常的<) - 用DOMDocument加载解码后的HTML,定位到
img标签并提取src属性
代码示例:
// 你的JSON响应字符串 $jsonResponse = '{ "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..." }'; // 1. 解析JSON为关联数组 $data = json_decode($jsonResponse, true); if (isset($data['thumbnail_html'])) { // 2. 解码HTML实体,还原正常HTML结构 $html = htmlspecialchars_decode($data['thumbnail_html']); // 3. 初始化DOMDocument,抑制解析时的警告(兼容不规范HTML) $dom = new DOMDocument(); libxml_use_internal_errors(true); $dom->loadHTML($html); libxml_clear_errors(); // 4. 查找所有img标签,提取第一个的src属性 $imgTags = $dom->getElementsByTagName('img'); if ($imgTags->length > 0) { $imageUrl = $imgTags->item(0)->getAttribute('src'); echo "提取到的图片URL:" . $imageUrl; } else { echo "未找到图片标签"; } } else { echo "JSON中不存在thumbnail_html字段"; }
方法二:使用正则表达式(仅适用于简单固定场景)
如果你的HTML结构完全不会变动,也可以用正则快速提取,但不推荐用于复杂或可能变化的HTML——只要HTML结构稍有调整,正则就可能失效。
代码示例:
$jsonResponse = '{ "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..." }'; $data = json_decode($jsonResponse, true); if (isset($data['thumbnail_html'])) { $html = htmlspecialchars_decode($data['thumbnail_html']); // 匹配img标签内的src属性值 preg_match('/<img[^>]+src="([^"]+)"/i', $html, $matches); if (!empty($matches[1])) { echo "提取到的图片URL:" . $matches[1]; } else { echo "未匹配到图片URL"; } }
两种方法里,优先选DOM解析器,它能处理各种不规范的HTML,稳定性和扩展性都更强。
内容的提问来源于stack exchange,提问作者Joe Ronald
相关产品推荐
相关产品推荐

