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

PHP 字串操作完全指南:核心函數分類速查與實戰避坑

     編輯:PHP 相關知識

前言:函數太多記不住?建立「分類索引」比死記硬背更高效

PHP 內建字串函數超過 100 個,沒人能全記住。關鍵是建立分類心智模型:需要時按類別查閱、對比選型。本文將常用函數按「定義、轉義、序列化、整理、格式化、分割、截取、長度、統計、查找、替換/處理」11 大類歸納,附帶實戰提示。

一、字串定義方式

方式語法特性適用場景
單引號'hello $var'不解析變量、不轉義(除 \\ \'),速度最快純靜態字串、大量輸出
雙引號"hello $var"解析變量、支援完整轉義序列需插值的動態字串
Heredoc<<<EOF ... EOF行為同雙引號,適合多行大段文本(SQL、HTML 模板)嵌入大段文本、郵件模板
Nowdoc<<<'EOF' ... EOF行為同單引號,PHP 5.3+不需解析的大段文本

💡 實戰提示: 索引陣列輸出調試時,{$arr[0]} 大括號語法在雙引號/Heredoc 中最清晰。

二、手動轉義與資料安全

  • addslashes($str):預定義轉義 ' " \ NULL(資料庫入庫前常用,但不如參數化查詢安全);
  • addcslashes($str, $charlist):自定義字符範圍轉義(如 '\0..\37!@');
  • 現代最佳實踐:PDO 預處理語句 / mysqli_real_escape_string()(僅限 MySQL)。

三、序列化與反序列化

  • serialize($mixed):將任意值(含物件)轉為可存儲字串;
  • unserialize($str):還原(警惕非信任資料反序列化導致 RCE,PHP 7.0+ 支援 allowed_classes 選項)。

替代方案: JSON(json_encode/decode)跨語言、可讀、安全性更高,優先考慮。

四、字串整理(去除首尾空白字符)

函數作用範圍移除字符(預設)
trim($str, $charlist?)兩端空格、\t、\n、\r、\0、\v
ltrim()左端同上
rtrim()右端同上

💡 進階: 第二參數可指定自定義字符集合,如 trim($str, " \t\n\r\0\x0B")。

五、格式化字串

函數功能典型用例
nl2br($str)\n → <br>前端顯示換行
wordwrap($str, $width, $break, $cut)按寬度換行郵件正文、防止長單詞撐破版面
strtolower/strtoupper大小寫轉換案件不敏感比較
ucfirst/ucwords首字母/每詞首字母大寫姓名、標題格式化

六、分割與合併

  • explode($delimiter, $str, $limit?):按分隔符切分為陣列($limit > 0 限制返回數,< 0 返回除最後 |$limit| 個外的所有);
  • implode($glue, $pieces) / join():陣列合併為字串;
  • ⚠ 陷阱: explode('', $str) 會報錯,分隔符不能為空;需逐字符分割用 str_split() 或 preg_split('//u', $str)。

七、字串截取

函數參數說明
substr($str, $start, $length?)起始位置、長度負數表示從末尾倒數;多位元組字串會產生亂碼
mb_substr($str, $start, $length?, $encoding)同上 + 編碼正確處理 UTF-8 等多位元組編碼,**生產環境必用**

八、長度計算

  • strlen($str):返回字節數,UTF-8 中一個漢字佔 3 字節;
  • mb_strlen($str, $encoding):返回字符數,漢字計為 1。**涉及業務邏輯長度判斷必須用 mb_* 系列**。

九、單詞統計

  • str_word_count($str, $format?, $charlist?):統計單詞數($format=1 返回單詞陣列,2 返回位置關聯陣列);
  • 配合 array_count_values() 可得單詞頻次統計(簡易關鍵詞提取)。

十、查找與定位

函數返回值大小寫備註
strpos($haystack, $needle, $offset?)首次出現位置(整數)或 false敏感**必須用 === false 判斷**,0 也是有效位置
stripos()同上不敏感同上
strrpos()最後一次出現位置敏感
strstr($haystack, $needle, $before_needle?)從針開始/之前的子串敏感$before_needle=true 返回針之前部分
stristr()同上不敏感
substr_count($haystack, $needle)出現次數敏感不支援重疊匹配

十一、替換與深度處理

函數功能關鍵差異
str_replace($search, $replace, $subject, $count?)全量替換支援陣列批量替換,$count 返回替換次數
substr_replace($str, $replacement, $start, $length?)按位置替換可插入、刪除、替換指定區間
strrev($str)反轉字串多位元組會亂碼,慎用
htmlspecialchars($str, $flags?, $encoding?)< > & " ' → 實體**XSS 防禦首選**,預設不轉義單引號(需 ENT_QUOTES)
htmlentities($str, $flags?, $encoding?)所有可轉實體字符皆轉換更徹底,體積增大
strip_tags($str, $allowable_tags?)移除 HTML/PHP 標籤第二參數保留允許標籤,**不可完全防 XSS**
strcmp/strncmp/strcasecmp二進制/長度限制/不敏感比較返回 <0, 0, >0
strtok($str, $token)順序分解有狀態,多線程/遞迴慎用
strpbrk($str, $charlist)查找字符集合中任一字符首次出現返回子串或 false
strspn/strcspn字串開頭連續包含/不包含字符集合的長度驗證格式(如純數字)

總結:建立你的「字串工具箱」索引卡

建議將上表另存為 Markdown/Notion 頁面,遇到字串處理需求先查分類:

  1. 是否涉及多語言/UTF-8?→ 全程 mb_* 系列;
  2. 是否輸出到 HTML?→ htmlspecialchars(..., ENT_QUOTES, 'UTF-8');
  3. 是否需高效能批量替換?→ str_replace 陣列模式;
  4. 是否需正則級靈活度?→ preg_* 系列(下篇詳解)。

掌握分類與關鍵差異,比背誦百個函數參數更實用。

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