php中访问字符串单个字符最常用方式是方括号[]或花括号{}按字节索引,对ascii安全但utf-8中文需用mb_substr等多字节函数处理。

PHP 中访问字符串的单个字符,最常用、最直接的方式就是用方括号 [] 或花括号 {} 像访问数组一样操作——但要注意:这本质是**按字节索引**,对英文和 ASCII 字符完全安全,对中文等 UTF-8 多字节字符需格外小心。
基础语法:用下标取单个字节
PHP 字符串本质是字节数组,所以支持用整数下标(从 0 开始)直接获取对应位置的字节:
$str = "hello"; echo $str[0]; // 输出 hecho $str[1]; // 输出 eecho $str[-1]; // PHP 7.1+ 支持负数下标,输出 o(倒数第一个)- 方括号
[]和花括号{}效果一致,如$str{2}等价于$str[2](但推荐用[],更通用且未来兼容性更好)
重要提醒:UTF-8 中文不能直接用下标!
UTF-8 编码下,一个中文字符占 3 个字节。如果直接用 $str[0] 取“你好”,会得到第一个字节(可能是乱码),而不是“你”字:
$str = "你好"; var_dump($str[0]); // 输出 \xe4(UTF-8 “你”的首字节,非可读字符)- 想正确获取第 1 个 Unicode 字符(即“你”),必须用多字节函数:
mb_substr($str, 0, 1, 'UTF-8')—— 第 3 个参数指定长度为 1 个字符,第 4 个参数指定编码 - 获取字符数(不是字节数):用
mb_strlen($str, 'UTF-8'),而非strlen()
安全又灵活:推荐组合方案
日常开发中,兼顾简洁与健壮的做法是:
- 纯英文/数字/ASCII 场景:放心用
$str[$i],性能高、写法短 - 可能含中文、日文、emoji 等多字节字符时:
• 统一使用mb_substr($str, $i, 1, 'UTF-8')取第$i个字符
• 遍历所有字符时,用for ($i = 0; $i - 临时判断是否为 ASCII 字符?可用
ord($str[$i]) 快速筛查
小技巧:修改单个字符?可以但要谨慎
PHP 允许对字符串下标赋值(仅限单字节):
$str = "abc"; $str[1] = "X"; echo $str; // 输出 aXc- 但对 UTF-8 中文赋值会破坏编码:
$str = "你好"; $str[0] = "A";→ 结果不可预测,强烈不建议 - 如需替换某个 Unicode 字符,请用
mb_substr拆分 + 拼接,或用preg_replace/mb_ereg_replace
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











