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

PHP 字串截取與搜尋實戰:strpos、substr、strstr 三大函數完整指南

     編輯:PHP 相關知識

    核心函數速查表

    函數用途回傳值常見參數
    strpos($haystack, $needle, $offset=0)搜尋子字串首次出現位置整數位置(0 起),找不到回傳 false$offset 可指定起始搜尋位置
    substr($string, $start, $length=null)截取部分字串截取後的字串,失敗回傳 false$start 正數=從開頭、負數=從結尾、0=第一字元;$length 正數=長度、負數=從結尾往前略過
    strstr($haystack, $needle, $before_needle=false)從子字串位置分割字串預設回傳 $needle 及其後內容;$before_needle=true 回傳之前內容PHP 5.3+ 支援第三參數

    實戰範例與輸出

    1. strpos() 定位關鍵字

    <?php
    $str = 'Hello world!';
    $pos = strpos($str, 'wo');
    var_dump($pos); // int(6)
    
    if ($pos !== false) {
        echo "找到於索引 $pos";
    } else {
        echo '未找到';
    }
    ?>

    注意:必須使用 !== false 判斷,因為位置 0 會被視為 false。

    2. substr() 靈活截取

    <?php
    $str = 'Hello world!';
    
    // 從索引 6 取 5 個字元
    echo substr($str, 6, 5);   // world
    
    // 從倒數第 6 個字元取到結尾
    echo substr($str, -6);     // world!
    
    // 取前 5 個字元
    echo substr($str, 0, 5);   // Hello
    
    // 取開頭到倒數第 7 個字元之前
    echo substr($str, 0, -7);  // Hel
    ?>

    3. strstr() 分割字串(常用於 Email、URL 解析)

    <?php
    $email = 'user@example.com';
    
    // 取得 @ 及之後部分(預設行為)
    $domain = strstr($email, '@');        // @example.com
    
    // 取得 @ 之前部分(PHP 5.3+)
    $user = strstr($email, '@', true);    // user
    
    // 搭配 substr 處理
    $userAlt = substr($email, 0, strpos($email, '@')); // user (相容舊版)
    ?>

    進階技巧與常見陷阱

    1. 多位元組字串(中文、日文等):上述函數皆按位元組操作,非字元。處理 UTF-8 請改用 mb_strpos()、mb_substr()、mb_strstr(),並設定 mb_internal_encoding('UTF-8')。
    2. 大小寫不敏感搜尋:使用 stripos()、stristr()。
    3. 找不到時回傳:strpos/stripos 回傳 false;strstr/stristr 回傳 false;substr 回傳 false(PHP 8.0+ 拋出 ValueError)。
    4. 效能提示:單純檢查是否包含子字串,strpos() !== false 比 strstr() 更快(不需複製字串)。
    5. 替代方案:複雜模式匹配請用 preg_match();固定寬度切割可用 str_split() 或 unpack()。

    綜合應用範例:解析 URL 參數

    <?php
    function parseQueryString($url) {
        $queryStart = strpos($url, '?');
        if ($queryStart === false) return [];
        $query = substr($url, $queryStart + 1);
        $pairs = explode('&', $query);
        $params = [];
        foreach ($pairs as $pair) {
            $eqPos = strpos($pair, '=');
            if ($eqPos !== false) {
                $key   = urldecode(substr($pair, 0, $eqPos));
                $value = urldecode(substr($pair, $eqPos + 1));
            } else {
                $key   = urldecode($pair);
                $value = '';
            }
            $params[$key] = $value;
        }
        return $params;
    }
    
    $url = 'https://example.com/search?q=php+string&page=2&lang=zh';
    print_r(parseQueryString($url));
    /*
    Array
    (
        [q] => php string
        [page] => 2
        [lang] => zh
    )
    */
    ?>
    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved