首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 採集利器:根據起止字符串精準截取內容的通用函數

     編輯:PHP 相關知識

PHP 採集利器:根據起止字符串精準截取內容

網頁採集中,常需從 HTML 中提取兩個標記之間的內容。本文提供一個健壯的 strCutByStr() 函數,支持多編碼、多組起止標記優先匹配、可選結束標記(截取到末尾)。

核心函數

<?php
function strCutByStr(&$str, $findStart, $findEnd = false, $encoding = 'utf-8') {
    // 支持數組批量嘗試:多組起止標記按順序嘗試,成功即返回
    if (is_array($findStart)) {
        if (count($findStart) === count($findEnd)) {
            foreach ($findStart as $k => $v) {
                if (($result = strCutByStr($str, $v, $findEnd[$k], $encoding)) !== false) {
                    return $result;
                }
            }
            return false;
        }
        return false;
    }
    // 單組匹配邏輯
    if (($start = mb_strpos($str, $findStart, 0, $encoding)) === false) {
        return false;
    }
    $start += mb_strlen($findStart, $encoding); // 移至開始標記之後
    if ($findEnd === false) {
        return mb_substr($str, $start, NULL, $encoding); // 截取到末尾
    }
    if (($length = mb_strpos($str, $findEnd, $start, $encoding)) === false) {
        return false;
    }
    return mb_substr($str, $start, $length - $start, $encoding);
}

使用示例

$str = '1那是一場23我問問4567890維穩';
echo strCutByStr($str, '那些', '穩'); // 輸出:一場23我問問4567890維

// 多組備選:優先匹配第一組,失敗嘗試第二組
$starts = ['<div class="content">', '<article>'];
$ends   = ['</div>', '</article>'];
echo strCutByStr($html, $starts, $ends);

設計亮點

  • 多字節安全:全程使用 mb_* 函數,完美支持 UTF-8/GBK 等編碼。
  • 多組備選:適應頁面結構變化(如 A/B 測試、新老版本共存)。
  • 引用傳遞:&$str 避免大字符串複製,性能更優。
  • 靈活結束:$findEnd = false 時截取到字符串末尾。

將此函數收入工具庫,採集項目中提取標題、正文、價格等字段將事半功倍。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved