ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
~~~ <?php namespace lib; class GetImgSrc { /** * 提取HTML文章中的图片地址 * * @param string $data HTML或者文章 * @param int $num 第 $num 个图片的src,默认为第一张 * @param string $order 顺取倒取; 默认为 asc ,从正方向计数。 desc 从反方向计数 * @param string|array $blacklist 图片地址黑名单,排除图片地址中包含该数据的地址;例如 传入 baidu.com 会排除 src="http://www.baidu.com/img/a.png" * @param string $model 默认为字符串模式;可取值 string preg;string模式处理效率高,PHP版本越高速度越快,可比正则快几倍 * * @return false | null | src 当data为空时返回 false , src不存在时返回 null ,反之返回src */ public static function src($data, $num = 1, $order = 'asc', $blacklist = false, $model = 'string') { if (isset($data)) { if ($model === 'preg') { $imgSrc = self::pregModel($data, $num - 1, $order); } else { $imgSrc = self::strModel($data, $num, $order); } if ($blacklist === false) { return $imgSrc; } else { if (is_array($blacklist)) { foreach ($blacklist as $value) { if (strpos($imgSrc, $value) !== false) { return self::src($data, $num + 1, $order, $blacklist, $model); }; } return $imgSrc; } else { if (strpos($imgSrc, $blacklist) === false) { return $imgSrc; } else { return self::src($data, $num + 1, $order, $blacklist, $model); } } } } else { return false; } } /** * 提取HTML文章中的图片地址 * * @param string $data HTML或者文章 * @param int $startNum 默认为1,从第一张图片开始抽取 * @param int $length 从 $startNum 开始抽取,共抽取 $length 张;默认为0,为0则抽取到最后 * @param string $order 顺取倒取; 默认为 asc ,从正方向计数。 desc 从反方向计数 * @param string|array $blacklist 图片地址黑名单,排除图片地址中包含该数据的地址;例如 传入 img.baidu.com 会排除 src="img.baidu.com/a.png" * @param string $model 抽取集合时,默认为正则模式;可选模式:preg string,当 $length > 3 或者 $length = * 0时,强制使用正则模式,因为取的数量大时,正则速度更快。 * * @return 图片地址的集合数组,若无则返回空数组[] */ public static function srcList( $data, $startNum = 1, $length = 0, $order = 'asc', $blacklist = false, $model = 'preg' ) { if ($model === 'preg' || $length > 3 || $length === 0) { $imgSrcArr = self::pregModel($data, [$startNum - 1, $length, $blacklist], $order); } else { $imgSrcArr = []; for ($i = $startNum; $i < $startNum + $length; $i++) { $imgSrc = self::strModel($data, $i, $order); if (is_array($blacklist)) { $blackBool = true; foreach ($blacklist as $k => $v) { if (strpos($imgSrc, $blacklist) !== false) { $blackBool = false; } } if ($blackBool) { $imgSrcArr[] = $imgSrc; } else { $length++; } } else { if (strpos($imgSrc, $blacklist) === false) { $imgSrcArr[] = $imgSrc; } else { $length++; } } } } return $imgSrcArr; } /** * @param $str * @param $num * @param $order * * @return bool|string|null */ public static function strModel($str, $num, $order) { $topStr = null; if ($order != 'asc') { $funcStr = 'strrpos'; } else { $funcStr = 'strpos'; } for ($i = 1; $i <= $num; $i++) { $firstNum = $funcStr($str, '<img'); if ($firstNum !== false) { if ($order != 'asc') { $topStr = $str; $str = substr($str, 0, $firstNum); } else { $str = substr($str, $firstNum + 4); } } else { return null; } } $str = $order == 'asc' ? $str : $topStr; $firstNum1 = $funcStr($str, 'src='); $type = substr($str, $firstNum1 + 4, 1); $str2 = substr($str, $firstNum1 + 5); if ($type == '\'') { $position = strpos($str2, "'"); } else { $position = strpos($str2, '"'); } $imgPath = substr($str2, 0, $position); return $imgPath; } /** * @param $str * @param $num * @param $order * * @return string|array|null */ public static function pregModel($str, $num, $order) { preg_match_all("/<img.*>/isU", $str, $ereg); $img = $ereg[0]; if ($order != 'asc') { $img = array_reverse($img); }; if (is_array($num)) { $startNum = $num[0]; $length = $num[1]; $blacklist = $num[2]; $imgSrcArr = []; foreach ($img as $key => $value) { $imgSrc = $value; $pregModel = "/src=('|\")(.*)('|\")/isU"; preg_match_all($pregModel, $imgSrc, $img1); if (is_array($blacklist)) { $blacklistBool = true; foreach ($blacklist as $v) { if (strpos($img1[2][0], $v) !== false) { $blacklistBool = false; }; } if ($blacklistBool) { $imgSrcArr[] = $img1[2][0]; }; } else { if (strpos($img1[2][0], $blacklist) === false) { $imgSrcArr[] = $img1[2][0]; }; } } if ($length > 0) { return array_slice($imgSrcArr, $startNum, $length); } else { return array_slice($imgSrcArr, $startNum); } } else { if ( ! empty($img[$num])) { $imgStr = $img[$num]; $pregModel = "/src=('|\")(.*)('|\")/isU"; preg_match_all($pregModel, $imgStr, $img1); return $img1[2][0]; } else { return null; } } } } /* $str = '<div> <p>这里是普通文字</p> <p>这里是干扰元素测试\'\'"""</p> <img src="src1.png"/> <img src=\'src2.png\'/> <img src="src3.jpg"/> <img src="src4.jpg"/> <img src="src5.jpg"/> </div>'; $src = GetImgSrc::srcList($str, 2, 3, 'asc', false, 'string'); $src2 = GetImgSrc::src($str, 2, 3, 'asc', false); var_dump($src); var_dump($src2); */ ?> ~~~