PHP 字符串函数大全

PHP 字符串函数大全(速查参考)


1. 长度与截取

函数 说明
strlen($s) 字节长度(中文 UTF-8 占 3 字节)
mb_strlen($s [, $enc]) 字符数(中文安全)
substr($s, $off [, $len]) 按字节截取(中文易乱码)
mb_substr($s, $off [, $len] [, $enc]) 按字符截取(中文安全)
mb_strcut($s, $off [, $len]) 按字节截取但保证不截断多字节字符
str_split($s [, $len]) 拆分为等长子串数组(按字节)
mb_str_split($s [, $len] [, $enc]) (PHP 7.4) 按字符拆分
php
$s = '中文abc';
strlen($s);          // 9(3×3 + 3)
mb_strlen($s);       // 5(字符数)
mb_substr($s, 0, 2); // '中文'
substr($s, 0, 2);    // '�'(截断多字节,乱码)

2. 查找与定位

函数 说明
strpos($s, $n [, $off]) 首次出现位置(字节偏移),未找到返回 false
stripos($s, $n) 不区分大小写
strrpos($s, $n) / strripos($s, $n) 最后一次出现位置
strstr($s, $n) / stristr($s, $n) 返回首次出现到末尾的子串(含 $n
strchr($s, $n) strstr 的别名
strrchr($s, $n) 返回最后一次出现到末尾
str_contains($s, $n) (PHP 8.0) 是否包含子串,返回 bool
str_starts_with($s, $p) (PHP 8.0) 是否以 $p 开头
str_ends_with($s, $p) (PHP 8.0) 是否以 $p 结尾
php
$hay = 'hello world';
strpos($hay, 'world');        // 6(位置,非 bool)
strpos($hay, 'xyz');          // false(必须用 === 判断)

// PHP 8.0 推荐写法(替代 strpos(...) !== false)
str_contains($hay, 'world');  // true
str_starts_with($hay, 'hello'); // true
str_ends_with($hay, 'world');   // true

3. 替换

函数 说明
str_replace($s, $r, $subj [, &$cnt]) 子串替换(支持数组批量)
str_ireplace(...) 不区分大小写
substr_replace($s, $r, $off [, $len]) 按位置替换
strtr($s, $from, $to) / strtr($s, $map) 字符映射替换
php
str_replace('world', 'PHP', 'hello world'); // 'hello PHP'
str_replace(['a','b'], ['x','y'], 'abc');   // 'xyc'

// 危险字符过滤
strtr($s, ['<' => '<', '>' => '>']);

4. 大小写转换

函数 说明
strtolower($s) / strtoupper($s) 转小写 / 大写(单字节,中文无效)
ucfirst($s) / lcfirst($s) 首字母大写 / 小写
ucwords($s [, $delim]) 每个词首字母大写
mb_strtolower($s [, $enc]) / mb_strtoupper($s) 中文安全的大小写转换
mb_convert_case($s, $mode [, $enc]) MB_CASE_UPPER/LOWER/TITLE
php
strtoupper('hello');        // 'HELLO'
ucwords('hello world');     // 'Hello World'
mb_strtoupper('αβγ', 'UTF-8'); // 'ΑΒΓ'(希腊字母也能转)

5. 去除空白与清理

函数 说明
trim($s [, $char]) 去除首尾空白(或指定字符)
ltrim($s) / rtrim($s) / chop($s) 左 / 右去除(choprtrim 别名)
mb_trim($s) / mb_ltrim($s) / mb_rtrim($s) (PHP 8.3) 多字节安全的 trim
php
trim("  abc \t\n");      // 'abc'
trim('xxabcxx', 'x');    // 'abc'
// PHP 8.3 前多字节空白需用 preg_replace 或升级后直接用 mb_trim

6. 分割与连接

函数 说明
explode($d, $s [, $n]) 按分隔符拆分为数组
implode($glue, $arr) / join($glue, $arr) 数组合并为字符串
preg_split($p, $s [, $n] [, $flags]) 正则分割(支持多字节边界)
str_getcsv($s) 解析 CSV 行
php
explode(',', 'a,b,c');        // ['a','b','c']
implode('-', ['a','b','c']);  // 'a-b-c'
preg_split('/(?<=。)/u', $text); // 按中文句号切割(保留标点)

7. 填充与重复

函数 说明
str_pad($s, $len [, $pad] [, $type]) 填充到指定字节长度
mb_str_pad($s, $len [, $pad] [, $type] [, $enc]) (PHP 8.1)字符填充(中文安全)
str_repeat($s, $n) 重复 $n
php
str_pad('5', 3, '0', STR_PAD_LEFT); // '005'
mb_str_pad('中', 3, '·', STR_PAD_RIGHT, 'UTF-8'); // '中··'
str_repeat('ab', 3);                 // 'ababab'

8. 比较

函数 说明
strcmp($a, $b) 二进制安全比较(<0 / =0 / >0)
strcasecmp($a, $b) 不区分大小写
strnatcmp($a, $b) / strnatcasecmp 自然顺序比较
strncmp($a, $b, $n) 比较前 $n 个字符
substr_compare($s, $sub, $off [, $len] [, $cs]) 比较子串
strcoll($a, $b) 基于区域设置的比较
php
strcmp('apple', 'apply');   // 负值
strnatcmp('img2', 'img10'); // 负值(自然序:2 < 10)
substr_compare('hello', 'ell', 1, 3); // 0('ell' 匹配)

9. 格式化

函数 说明
sprintf($f, ...) / printf($f, ...) 格式化输出(返回 / 直接打印)
vprintf($f, $arr) / vsprintf($f, $arr) 参数以数组传入
number_format($n [, $d] [, $dec] [, $th]) 千分位 / 小数格式化
sscanf($s, $f, &...$vars) 按格式解析字符串
money_format($f, $n) ⚠️ 已废弃(PHP 7.4+),用 NumberFormatter 替代
php
sprintf('用户 %s 余额 %.2f', 'Andy', 12.5); // '用户 Andy 余额 12.50'
number_format(1234567.891, 2);             // '1,234,567.89'
number_format(1234567.891, 2, ',', ' ');   // '1 234 567,89'

10. 转义与编码(HTML / URL / Base64)

函数 说明
htmlspecialchars($s [, $flags] [, $enc]) 转义 & " ' < >输出 HTML 必用
htmlentities($s) 转义所有 HTML 实体
html_entity_decode($s) 反转义
strip_tags($s [, $allow]) 去除 HTML/PHP 标签
addslashes($s) / stripslashes($s) 添加 / 去除反斜杠(SQL 拼接勿用,应用预处理)
urlencode($s) / urldecode($s) 表单风格 URL 编码(空格 → +
rawurlencode($s) / rawurlencode RFC 3986 编码(空格 → %20,推荐)
http_build_query($arr) 数组 → 查询字符串
base64_encode($s) / base64_decode($s) Base64 编解码
bin2hex($s) / hex2bin($h) 二进制 ↔ 十六进制
php
htmlspecialchars('<b>x</b>', ENT_QUOTES, 'UTF-8'); // '<b>x</b>'
rawurlencode('a b/c');   // 'a%20b%2Fc'
http_build_query(['a' => 1, 'b' => 'x y']); // 'a=1&b=x+y'
base64_encode('hi');     // 'aGk='

11. 哈希与密码

函数 说明
md5($s [, $raw]) / sha1($s [, $raw]) 摘要(禁止用于密码存储
crc32($s) 校验和(32 位整数)
hash($algo, $s [, $raw]) 通用哈希(支持 sha256/sha512 等)
password_hash($pw, $algo) 密码存储专用(默认 PASSWORD_DEFAULT = bcrypt)
password_verify($pw, $hash) 验证密码
password_needs_rehash($hash, $algo) 判断是否需要重新哈希
php
hash('sha256', 'data');                 // 64 位十六进制
$hash = password_hash('secret', PASSWORD_DEFAULT);
password_verify('secret', $hash);       // true
// 切勿用 md5/sha1 存密码(可暴力破解),必须用 password_hash

12. 字符 / ASCII 转换

函数 说明
ord($c) 字符 → ASCII 码(单字节)
chr($c) ASCII 码 → 字符
mb_ord($c [, $enc]) / mb_chr($c [, $enc]) (PHP 7.2) 多字节字符 ↔ Unicode 码点
php
ord('A');        // 65
chr(65);         // 'A'
mb_ord('中', 'UTF-8'); // 20013
mb_chr(20013, 'UTF-8'); // '中'

13. 其他实用函数

函数 说明
strrev($s) 反转字符串(单字节,中文乱码 → 用自定义多字节反转)
str_shuffle($s) 随机打乱字符
str_repeat 7
levenshtein($a, $b) 编辑距离(拼写容错)
similar_text($a, $b [, &$pct]) 相似度
count_chars($s [, $mode]) 字符出现频率统计
str_word_count($s [, $f]) 英文单词计数
nl2br($s) 换行符 → <br>
wordwrap($s, $w [, $br] [, $cut]) 按宽度折行
chunk_split($s, $len [, $eol]) 按长度分块(常用于 Base64 输出)
convert_uuencode($s) / convert_uudecode($s) uuencode 编解码
php
strrev('abc');        // 'cba'
levenshtein('kitten', 'sitting'); // 3
nl2br("line1\nline2"); // 'line1<br>\nline2'

14. 多字节(mb_)专题

中文 / 日文 / emoji 等必须走 mb_*mbstring 扩展,Webman 默认已启用)。

函数 说明
mb_strlen / mb_substr / mb_strcut / mb_str_split 1
mb_strtolower / mb_strtoupper / mb_convert_case 4
mb_trim / mb_ltrim / mb_rtrim 5
mb_str_pad 7
mb_ord / mb_chr 12
mb_strpos / mb_stripos / mb_strrpos 多字节安全的查找(参数顺序同 mb_substr
mb_strwidth($s) 显示宽度(半角 1 / 全角 2,适合 UI 对齐)
mb_substr_count($s, $n) 子串出现次数
mb_convert_encoding($s, $to, $from) 编码转换(如 GBK → UTF-8)
mb_detect_encoding($s [, $list]) 探测编码
mb_check_encoding($s [, $enc]) 校验是否为合法编码
php
mb_strpos('中文测试', '测试', 0, 'UTF-8'); // 2(字符位置)
mb_strwidth('中文ab');                    // 6(2+2+1+1)
mb_convert_encoding($gbk, 'UTF-8', 'GBK');

实战避坑要点

  1. 中文必用 mb_*strlen/substr/strpos字节处理,处理 UTF-8 中文会截断、乱码、定位错误。统一使用 mb_strlen/mb_substr/mb_strpos
  2. strpos 返回值判断:未找到返回 false,找到可能返回 0(如 'hello' 中找 'h'),必须用 === / !== 或 PHP 8.0 的 str_contains
  3. 输出 HTML 转义:所有用户可控内容输出到页面前用 htmlspecialchars($s, ENT_QUOTES, 'UTF-8'),防 XSS。
  4. 密码存储:绝不用 md5/sha1;统一 password_hash() + password_verify()
  5. SQL 拼接:禁止 addslashes 拼接 SQL,使用 PDO 预处理 / 框架 DB 组件参数绑定(Webman 的 support\Db)。
  6. urlencode vs rawurlencode:路径片段用 rawurlencode(空格 %20),表单体用 urlencode(空格 +)。
  7. mb_trim 需 8.3+:低版本多字节空白清理用 preg_replace('/^\s+|\s+$/u', '', $s)

PHP 版本新增对照

版本 新增字符串相关函数
7.2 mb_ord()mb_chr()
7.4 mb_str_split()
8.0 str_contains()str_starts_with()str_ends_with()
8.1 mb_str_pad()
8.3 mb_trim()mb_ltrim()mb_rtrim()str_increment()str_decrement()

本文档为速查参考,完整函数签名与边界行为以 PHP 官方手册 为准。

评论 (0)

发表评论