php怎么获取字符串第一个字符 php取首字符【笔记】

4次阅读

最稳妥方式是substr($str, 0, 1),兼容性好、不依赖编码、空字符串安全;需取首个unicode字符时用mb_substr($str, 0, 1, ‘utf-8’),但须确保mbstring扩展已启用。

php怎么获取字符串第一个字符 php取首字符【笔记】

substr() 取首字符最稳妥

php 里取字符串第一个字符,substr($str, 0, 1) 是兼容性最好、语义最清晰的方式。它不依赖编码,也不怕空字符串或非 UTF-8 字符串出错。

  • 如果 $str 是空字符串,substr() 返回空字符串,不会警告
  • ASCII 和常见 UTF-8 中文都安全(因为只取字节起始位置,且长度为 1;多字节字符虽可能截断,但「首字符」在单字节语境下本就指首字节)
  • 避免用 $str[0] —— PHP 8.0+ 对非字符串类型会报 TypeError,且对 UTF-8 多字节字符返回的是第一个字节,不是逻辑上的“第一个 Unicode 字符”

需要真正取首个 Unicode 字符?用 mb_substr()

如果你的字符串含中文、emoji 或其他多字节字符,且业务上要求“第一个可视字符”,就得用多字节函数。

  • 必须指定编码:mb_substr($str, 0, 1, 'UTF-8'),漏掉第四个参数在某些环境会按 ISO-8859-1 解析,导致乱码
  • mb_substr() 在未开启 mbstring 扩展时会致命报错 Fatal error: Uncaught Error: Call to undefined function mb_substr(),上线前务必检查扩展是否启用
  • 性能略低于 substr(),但对单次调用几乎无感;高频循环中才需权衡

$str[0] 能不能用?看 PHP 版本和类型

直接用数组语法取首字符,在老项目里很常见,但风险明确:

  • PHP 7.4 及更早:对字符串可行,但对 NULLintArray 等类型静默转成字符串再取,行为难预测
  • PHP 8.0+:仅当 $str 是字符串时合法;其他类型直接抛 TypeError
  • 即使 $str 是字符串,$str[0] 返回的是字节,不是字符 —— 比如 "你好"[0] 得到的是 ä(UTF-8 首字节),不是

边界情况必须检查:空字符串、null、非字符串

真实业务里,$str 往往来自用户输入或数据库字段,不能默认非空非 null。

立即学习PHP免费学习笔记(深入)”;

  • 先判断:is_string($str) && $str !== '',再取字符;否则直接返回默认值(如空字符串或 false
  • 别用 empty($str) 判空——它会把 "0" 也当空,而 "0"[0] 明显是合法的首字符
  • 如果上游可能传 null,用空合并操作符更简洁:$first = $str ?? ''; $result = substr($first, 0, 1);

事情说清了就结束。最常被忽略的是:没意识到 $str[0]substr($str,0,1) 在 UTF-8 下根本不是一回事,以及忘了检查 mbstring 扩展是否存在。

text=ZqhQzanResources