PHP 8.1 字符串学习重在建立“字符串是可操作数据”的意识,核心掌握str_contains、stripos、mb_stripos三个判断函数及str_replace、preg_replace两种修改操作,并务必使用mb_strlen和清理零宽字符。

PHP 8.1 字符串入门,重点不在背函数,而在建立“字符串是可操作的数据”这个意识——它不是文本展示工具,而是能查、能切、能替、能验的一等公民。从最常用、最安全、最不容易踩坑的用法开始学,效率最高。
先掌握三个核心判断函数
日常90%的字符串需求,其实就围绕“有没有”“在哪儿”“是不是”展开:
- str_contains($text, $needle):只问“有没有”。PHP 8.0+ 引入,语义清晰、不写 !== false、不担心位置 0 误判。适合敏感词检测、简单关键词匹配。
- stripos($text, $needle):问“有没有且不区分大小写”。返回位置(数字)或 false,必须用 !== false 判断。比 str_contains 多一层灵活性,但要注意大小写场景。
- mb_stripos($text, $needle, 0, 'UTF-8'):中文/emoji/多语言环境必备。普通 stripos 按字节处理,遇到中文可能错位;加 mb_ 前缀 + 显式编码,才真正可靠。
再练两种高频修改操作
搜索之后,往往要动手改——删、换、截,选对函数省力又安全:
-
str_replace($search, $replace, $subject):静态替换首选。支持数组批量替换,比如一次清理多个 HTML 标签:
str_replace(['<script>', '', '<div>'], '', $html)</script>。 -
preg_replace('/pattern/', $replacement, $subject):模式化删除/替换专用。例如删所有邮箱:
preg_replace('/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/', '[EMAIL]', $text)。注意用preg_quote()转义用户输入的关键词,防正则注入。
别跳过长度和编码这两个隐形关卡
看似简单,却是线上报错高发区:
立即学习“PHP免费学习笔记(深入)”;
- 判断长度一律用 mb_strlen($str, 'UTF-8'),不用 strlen()。含中文时,strlen 返回字节数(如“你好”是6),而用户看到的是2个字符。
- 所有涉及中文、emoji、日韩文的操作,只要函数名里没带
mb_前缀(如 substr、strpos),默认按字节处理,大概率出错。宁可多打几个字母,也别省 mb_。 - 时间字符串、用户输入、API 返回值——凡是你没完全控制来源的字符串,先 trim() + preg_replace 清理零宽空格/BOM,再做后续处理。
最后提醒一个学习节奏
别一上来就啃正则或 mb_ 全家桶。建议按周推进:
- 第1天:只练 str_contains + str_replace,写5个真实小任务(比如检查URL是否含 http、把日志里的 ERROR 替成【错误】);
- 第3天:加入 stripos 和 mb_strlen,对比测试中英文混排结果;
- 第5天:尝试一个 preg_replace 小例子(如提取所有手机号),理解 / 和 \K 的作用;
- 第7天:把这四个能力串起来,做一个简易日志关键词高亮小工具。
不复杂但容易忽略。



















