当前位置: 首页 > news >正文

PHP 字符串函数全指南

PHP 字符串函数全指南

  • PHP 的字符串函数是核心内置能力,覆盖创建、修改、查找、格式化等常见操作,广泛用于表单处理、文本解析、数据清洗与页面渲染
  • 自 PHP 3 起可用,PHP 5 开始补充了不区分大小写的查找/替换等函数;多字节字符串需搭配 mbstring 扩展
  • 了解常见函数的语义与边界行为,对避免编码问题和性能陷阱非常关键

核心概念

  • 字符串是字节序列:strlen统计字节数而非字符数,UTF-8 中文会占多字节
  • 多字节兼容:对 UTF-8 使用mb_strlenmb_substr等以避免截断半个字符
  • 位置从 0 开始:substrstrpos等均以 0 作为首位索引
  • 不变性视角:虽然 PHP 字符串可变,但多数操作返回新字符串,注意赋值覆盖

常用函数速览

  • 长度与截取:strlensubstr
  • 查找与替换:strpos/striposstr_replace/str_ireplace
  • 修剪与填充:trim/ltrim/rtrimstr_pad
  • 大小写转换:strtolower/strtoupperucfirst/ucwords
  • 分割与合并:explodeimplode
  • 重复与格式化:str_repeatsprintf
  • HTML 安全:htmlspecialcharsnl2br

查找与替换

查找首次出现位置(区分大小写 / 忽略大小写)

strpos("Hello World","World");// 6stripos("Hello World","world");// 6

替换子串

str_replace("World","PHP","Hello World");// Hello PHPstr_ireplace("world","PHP","Hello World");// Hello PHP

查找最后出现位置

strrpos("One Two Two","Two");// 8

截取与拼接

基本截取

substr("Hello World",0,5);// Hellosubstr("Hello World",-5);// World

拼接建议

  • 少量拼接可用.运算符
  • 批量拼接避免循环中频繁.=, 先收集数组再统一implode
$parts=["Hello","PHP","World"];echoimplode(" ",$parts);// Hello PHP World

大小写与格式化

大小写转换

strtolower("PHP");// phpstrtoupper("php");// PHPucfirst("hello php");// Hello phpucwords("hello world");// Hello World

格式化输出

sprintf("ID:%04d Name:%s",27,"Alice");// ID:0027 Name:Alice

修剪与填充

修剪首尾空白或指定字符

trim(" Hello ");// Helloltrim(" Hello ");// Hellortrim(" Hello ");// Hellotrim("xxHelloxx","x");// Hello

填充到目标长度

str_pad("ID",5,"0",STR_PAD_LEFT);// 000IDstr_pad("A",3,"-",STR_PAD_RIGHT);// A--

分割与合并

分割字符串为数组

explode(",","a,b,c");// ["a","b","c"]

合并数组为字符串

implode("-",["a","b","c"]);// a-b-c

HTML 安全与换行

防止 XSS,将特殊字符转为 HTML 实体

htmlspecialchars("<b>X</b>",ENT_QUOTES,"UTF-8");// &lt;b&gt;X&lt;/b&gt;

将换行转为<br>标签

nl2br("Line1\nLine2");// Line1<br />Line2

多字节字符串(UTF-8 等)

避免把中文切断,使用 mbstring 函数

mb_strlen("你好","UTF-8");// 2mb_substr("你好世界",0,2,"UTF-8");// 你好
  • 与正则结合时,优先使用/u修饰符或mb_前缀函数,确保按字符而非字节匹配

正则相关(补充)

  • preg_matchpreg_replace用于复杂模式匹配与替换
  • 处理 UTF-8 时建议加u修饰符,避免与字节级匹配混淆
preg_match('/^\p{Han}+$/u',"你好");// 1(只含中文)$text=preg_replace('/world/i','PHP','Hello World');// Hello PHP

性能与最佳实践

  • 连接多个片段优先收集数组并用implode,一次性拼接比循环中的.=更快
  • 对长文本频繁替换,考虑顺序、大小写敏感版本以及是否预编译正则模式
  • 严格处理编码:输入输出均应确认编码一致(通常 UTF-8)
  • 对用户输入渲染到页面时,始终进行htmlspecialchars

常见坑

  • strlen在 UTF-8 下返回字节数,不是字符数;中文会出现长度“偏大”
  • substr在多字节字符串上可能截断半个字符,需改用mb_substr
  • trim第二参数不是正则,是字符列表;传入的每个字符都会被剔除
  • str_replace默认区分大小写;忽略大小写用str_ireplace
  • strpos返回位置或false,位置为 0 与false不同,比较时用===

小抄速表

  • 长度:strlen(字节)、mb_strlen(字符)
  • 截取:substrmb_substr
  • 查找:strpos/striposstrrpos
  • 替换:str_replace/str_ireplacepreg_replace
  • 变换:strtolower/strtoupperucfirst/ucwords
  • 分割/合并:explodeimplode
  • 修剪/填充:trim/ltrim/rtrimstr_pad
  • 格式化/重复:sprintfstr_repeat
  • HTML 安全:htmlspecialcharsnl2br

结语

  • 掌握字符串函数是 PHP 开发的基本功。围绕“编码一致性”“多字节兼容”“性能与安全”做取舍,能让你的文本处理既稳健又高效
  • 实战中优先选用 mbstring 版本的函数处理 UTF-8 文本,并为所有输出到 HTML 的字符串应用htmlspecialchars。对于复杂文本处理,考虑正则与流式方案配合使用
http://www.jsqmd.com/news/144987/

相关文章:

  • 微软系统直链下载工具 v1.3.5.1 中文绿色版 一键获取原版Win7、Win10、Win11系统镜像
  • 第八章 基因的表达与调控
  • 48654
  • TIME_WAIT详解
  • Kotlin vs Dart:当“优雅”变成心智负担,我选择了更简单的 Dart
  • 通达信判顶副图 提供源码 贴图
  • Appium Desired Capabilities 配置详解
  • 46538
  • Google DeepMind介绍
  • 医疗影像诊断AI的容错测试:软件测试从业者的实战指南‌
  • 当机器视觉遇见代码缺陷:样本增强的协同进化——面向软件测试从业者的技术迁移指南
  • 函数
  • Text2SQL+ORM实践
  • Windows10 永久关闭预览窗格
  • 【Linux专栏】查看文件行数、输出文件中内容 - 详解
  • 心理咨询行业技术发展现状与创新实践分析
  • 中银通支付卡回收哪里快,多久到账? - 京顺回收
  • 通达信FS放量买卖 源码
  • 测试左移的基石:代码预提交钩子(pre-commit)实战
  • mysql8使用ibd文件恢复数据或迁移到数据
  • 心灵栖所 · 未来疗愈场,长春师专打造“科技×艺术×东方正念”三维心理成长中心
  • 测试工程师的AI工具箱大公开:智能测试的进化之路
  • 蚌埠不锈钢管 食品级卫生无菌输送
  • 大数据安全防护:从理论到实践的完整指南
  • 二手电子回收商AI赋能分析
  • 本地知识库:数据安全与智能搜索新标杆
  • AI驱动安全测试:重构漏洞检测的范式革命
  • 让数字资产自动分类的 AI 标签革命 - 教程
  • 第二章第三节 借贷记账法知识点提炼
  • 质量门禁(Quality Gate)设计:不让一个有风险的构建上线