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

PHP 字串處理完全指南:格式化、子字串、比較、搜尋替換與中文支援

     編輯:PHP 相關知識

核心函數分類速查

分類常用函數用途
格式化trim, nl2br, htmlentities, addslashes, str_pad, strtoupper清理、轉義、填充、大小寫
子字串操作explode, implode, substr, strtok, str_split, strrev分割、合併、擷取、反轉
比較strcmp, strcasecmp, strnatcmp, strlen, substr_count排序、自然排序、長度、出現次數
搜尋替換strpos, strstr, str_replace, substr_replace, str_ireplace定位、替換、大小寫不敏感
多位元組mb_strlen, mb_substr, mb_strpos, mb_strstr, mb_substr_countUTF-8/GBK 中文正確處理

1. 字串格式化實戰

<?php
$raw = "  \n  Hello World!  \r\n  ";

// 去除空白
echo '[' . trim($raw) . ']';        // [Hello World!]
echo '[' . ltrim($raw) . ']';       // [Hello World!  \r\n  ]
echo '[' . rtrim($raw) . ']';       // [  \n  Hello World!]

// 換行轉換
$text = "Line1\nLine2\r\nLine3";
echo nl2br($text); // Line1
\nLine2
\nLine3 // HTML 轉義 (防 XSS) $unsafe = ''; echo htmlspecialchars($unsafe); // <script>alert(1)</script> // 資料庫轉義 (舊式 mysql_* 函數時代,現建議用 PDO 預處理) $escaped = addslashes("It's a \"test\"\\null"); // It\'s a \"test\"\\null // 字串填充 echo str_pad('5', 3, '0', STR_PAD_LEFT); // 005 echo str_pad('Hello', 10, '-'); // Hello----- // 大小寫轉換 echo strtoupper('hello'); // HELLO echo ucfirst('hello'); // Hello echo ucwords('hello world'); // Hello World ?>

2. 子字串操作技巧

<?php
$email = 'user.name@example.com';

// 分割
$parts = explode('@', $email);        // ['user.name', 'example.com']
$domain = $parts[1] ?? '';

// 合併
$tags = ['php', 'laravel', 'api'];
echo implode(',', $tags); // php,laravel,api

// 固定格式擷取 (如身分證、日期)
$id = 'A123456789';
$area = substr($id, 0, 1);      // A
$num = substr($id, 1);          // 123456789

// 字元陣列
$chars = str_split('ABC'); // ['A', 'B', 'C']

// 反轉
echo strrev('Hello'); // olleH
?>

3. 字串比較與搜尋

<?php
// 比較 (回傳負/0/正)
strcmp('apple', 'banana');    // < 0
strcasecmp('Apple', 'apple'); // 0 (不分大小寫)
strnatcmp('v2', 'v10');       // < 0 (自然排序: 2 < 10)

// 定位
$haystack = 'The quick brown fox';
strpos($haystack, 'quick');   // 4 (位置)
strpos($haystack, 'cat');     // false

// 子字串搜尋 (回傳剩餘字串)
strstr($haystack, 'quick');   // 'quick brown fox'
stristr($haystack, 'QUICK');  // 同上 (不分大小寫)

// 出現次數
substr_count('ababab', 'ab'); // 3
?>

4. 替換操作

<?php
$template = 'Hello {name}, welcome to {site}!';

// 簡單替換
echo str_replace(['{name}', '{site}'], ['John', 'PHP'], $template);
// Hello John, welcome to PHP!

// 陣列批次替換
$replacements = [
    '{name}' => 'Jane',
    '{site}' => 'Laravel',
];
echo strtr($template, $replacements); // 更安全,避免巢狀替換問題

// 部分替換 (位置/長度)
substr_replace('Hello World', 'PHP', 6, 5); // Hello PHP
?>

5. 中文/多位元組字串處理 (必要使用 mb_* 函數)

<?php
// 確保設定內部編碼
mb_internal_encoding('UTF-8');

$zh = '你好,世界!';

// 長度
strlen($zh);        // 15 (位元組數)
mb_strlen($zh);     // 7 (字元數)

// 擷取
substr($zh, 0, 6);      // 亂碼 (按位元組切)
mb_substr($zh, 0, 3);   // 你好,

// 定位
strpos($zh, '世');      // 可能錯誤
mb_strpos($zh, '世');   // 3 (正確)

// 出現次數
substr_count($zh, '你'); // 可能錯誤
mb_substr_count($zh, '你'); // 1
?>

6. 效能與最佳實踐

  • 單引號字串:不解析變數,速度略快
  • 避免雙引號內複雜表達式:使用 {$var} 語法
  • 大量字串連接:使用 implode() 或 sprintf() 優於反覆 .
  • 正則替代:簡單搜尋替換用 str_replace,複雜模式才用 preg_replace
  • 統一編碼:專案全域使用 UTF-8,資料庫、HTML、PHP 檔案編碼一致

熟練掌握字串函數,是 PHP 開發處理文字資料的核心基本功。

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