在開發 CMS 或部落格系統時,經常需要提取文章內容中的第一張圖片作為縮略圖。本文提供兩種實用的 PHP 實作方案,滿足不同業務場景需求。
<?php
$temp = mt_rand(1, 4);
$pattern = '/<[img|IMG].*?src=[\'|"](.*?(?:\.gif|\.jpg|\.png))[\'|"].*?[\/]?>/';
$content = $article->Content; // 文章內容
preg_match_all($pattern, $content, $matchContent);
if (isset($matchContent[1][0])) {
$temp = $matchContent[1][0];
} else {
$temp = "images/random/$temp.jpg"; // 需在對應目錄放置 1~4.jpg
}
?>
邏輯說明:優先提取文章首張圖片;若文章無圖片,則從 style/images/random/ 目錄隨機抽取 1.jpg~4.jpg 作為預設圖。
<?php
$pattern = '/<[img|IMG].*?src=[\'|"](.*?(?:\.gif|\.jpg|\.png))[\'|"].*?[\/]?>/';
$content = $article->Content;
preg_match_all($pattern, $content, $matchContent);
if (isset($matchContent[1][0])) {
$temp = $matchContent[1][0];
} else {
$temp = "./images/no-image.jpg"; // 放置單一預設圖
}
?>
適用場景:不想要隨機效果,統一使用 no-image.jpg 作為佔位圖,維護更簡單。
<[img|IMG]:匹配 img 標籤(不區分大小寫)src=[\'|"]:匹配 src 屬性,支援單雙引號(.*?(?:\.gif|\.jpg|\.png)):非貪婪捕獲圖片 URL,限定常見格式[\/]?>:匹配自閉合或標準閉合標籤進階建議:實際專案中建議將此邏輯封裝為工具類方法,並加入快取機制避免重複正則解析影響效能。