1. 字符串的表示方式
1.1. 单引号
‘……’
- 支持部分转义字符
| \’ | 单引号 |
| \\ | 反斜线 |
- 不支持变量解析
1.2. 双引号
“……”
- 支持全部转义字符
| \” | 双引号 |
| \\ | 反斜线 |
| \n | 换行符 |
| \r | 回车符 |
| \t | 水平制表符 |
| \v | 垂直制表符 |
| \e | 退出符 |
| \f | 换页符 |
| \$ | 美元标记 |
| [0-7]{1,3} | 八进制方式表示的字符 |
| \x[0-9A-Fa-f]{1,2} | 十六进制方式表示的字符 |
- 支持变量解析
1.3. nowdoc 结构
<<<‘定界符’
……
定界符
- 定界符遵守标识符的命名规则
- 开始定界符之后、结束定界符之前,只能存在换行
- 对转义字符和变量解析的支持,类似于单引号字符串
1.4. heredoc 结构
<<<“定界符”
……
定界符
<<<定界符
……
定界符
- 定界符遵守标识符的命名规则
- 开始定界符之后、结束定界符之前,只能存在换行
- 对转义字符和变量解析的支持,类似于双引号字符串
2. 字符串变量解析
2.1. 简单语法
“$变量”
2.2. 复杂语法
“{$变量}”
- {} 和变量之间不能存在空格
2.3. 简单语法/复杂语法的选择
| $变量 | 变量 | 简单语法/复杂语法 |
| $索引数组[键] | 索引数组元素 | 简单语法/复杂语法 |
| $关联数组[键] | 关联数组元素 | 复杂语法 |
| $数组[键1][键2] | 多维数组元素 | 复杂语法 |
| $对象->属性 | 对象属性 | 简单语法/复杂语法 |
3. 字符串中的字符
$字符串[下标]
$字符串{下标}
- 下标从 0 开始
- 仅适用于单字节字符串
4. 字符串运算符
4.1. 连接
$字符串1 . $字符串2
4.2. 连接赋值
$字符串1 .= $字符串2
5. 字符串处理函数
- 字符串处理函数不直接作用于字符串本身
5.1. 长度
5.1.1. 计算英文字符串的长度
int strlen(string 字符串)
- 英文字符占 1 个字符,中文字符占 3 个字符
5.1.2. 计算中文字符串的长度
int mb_strlen(string 字符串[, string 字符编码])
- 字符编码:一般使用 UTF8 编码
- 英文字符和中文字符都占 1 个字符
5.2. 查找
5.2.1. 查找英文字符串第一次出现的位置(区分大小写)
int strpos(string 字符串, string 查找的字符串[, int 查找的开始位置/查找的结束位置])
- 查找的开始位置/查找的结束位置:可以是正数或负数,正数表示查找的开始位置,负数表示查找的结束位置;如果省略,则从字符串的首位开始查找
- 返回值:如果没有查找到字符串,则返回 false
- 英文字符占 1 个字符,中文字符占 3 个字符
5.2.2. 查找英文字符串最后一次出现的位置(区分大小写)
int strrpos(string 字符串, string 查找的字符串[, int 查找的开始位置/查找的结束位置])
- 查找的开始位置/查找的结束位置:可以是正数或负数,正数表示查找的结束位置,负数表示查找的开始位置;如果省略,则从字符串的末位开始查找
5.2.3. 查找英文字符串第一次出现的位置(不区分大小写)
int stripos(string 字符串, string 查找的字符串[, int 查找的开始位置/查找的结束位置])
5.2.4. 查找英文字符串最后一次出现的位置(不区分大小写)
int strripos(string 字符串, string 查找的字符串[, int 查找的开始位置/查找的结束位置])
5.2.5. 查找中文字符串第一次出现的位置(区分大小写)
int mb_strpos(string 字符串, string 查找的字符串[, int 查找的开始位置/查找的结束位置[, string 字符编码]])
- 字符编码:一般使用 UTF8 编码
- 英文字符和中文字符都占 1 个字符
5.2.6. 查找中文字符串最后一次出现的位置(区分大小写)
int mb_strrpos(string 字符串, string 查找的字符串[, int 查找的开始位置/查找的结束位置[, string 字符编码]])
5.2.7. 查找中文字符串第一次出现的位置(不区分大小写)
int mb_stripos(string 字符串, string 查找的字符串[, int 查找的开始位置/查找的结束位置[, string 字符编码]])
5.2.8. 查找中文字符串最后一次出现的位置(不区分大小写)
int mb_strripos(string 字符串, string 查找的字符串[, int 查找的开始位置/查找的结束位置[, string 字符编码]])
5.3. 截取
5.3.1. 截取英文字符串
string substr(string 字符串, int 截取的开始位置[, int 截取的长度/截取的结束位置])
- 截取的开始位置:可以是正数或负数,正数从首位开始,负数从末位开始
- 截取的长度/截取的结束位置:可以是正数或负数,正数表示截取的长度,负数表示截取的结束位置;如果省略,则截取到字符串的末位
- 截取的字符串包含截取的开始位置,不包含截取的结束位置
- 英文字符占 1 个字符,中文字符占 3 个字符
5.3.2. 截取中文字符串
string mb_substr(string 字符串, int 截取的开始位置[, int 截取的长度/截取的结束位置[, string 字符编码]])
- 字符编码:一般使用 UTF8 编码
- 英文字符和中文字符都占 1 个字符
5.3.3. 从字符串第一次出现的位置截取字符串(区分大小写)
string strstr(string 字符串, string 查找的字符串[, bool 是否向前截取])
- 是否向前截取:可以是 true 或 false,true 表示向前截取,false 表示向后截取
- 返回值:如果没有查找到字符串,则返回 false
5.3.4. 从字符串第一次出现的位置截取字符串(不区分大小写)
string stristr(string 字符串, string 查找的字符串[, bool 是否向前截取])
5.4. 替换
5.4.1. 替换字符串(区分大小写)
mixed str_replace(mixed 查找的字符串, mixed 替换的字符串, mixed 字符串[, int &替换的数量])
| 查找的字符串 | 替换的字符串 |
|---|---|
| 字符串 | 字符串 |
| 数组 | 字符串 |
| 数组 | 数组 |
- 查找的字符串:如果是数组,则各个数组元素依次替换
- 如果查找的字符串和替换的字符串都是数组,且查找的字符串的数组元素多于替换的字符串的数组元素,则多余的数组元素用空字符串替换
- 字符串:可以是字符串或数组
- 替换的数量:用于统计替换的数量
5.4.2. 替换字符串(不区分大小写)
mixed str_ireplace(mixed 查找的字符串, mixed 替换的字符串, mixed 字符串[, int &替换的数量])
5.5. 分割/连接
5.5.1. 按长度分割字符串
array str_split(string 字符串[, int 分割的长度])
- 分割的长度:如果省略,则分割成单个字符
- 仅适用于单字节字符串
5.5.2. 用分割符分割字符串
array explode(string 分割符, string 字符串)
5.5.3. 用连接符连接字符串
string implode(string 连接符, array 数组)
string implode(array 数组)
5.6. 比较
5.6.1. 比较字符串(区分大小写)
int strcmp(string 字符串1, string 字符串2)
- 返回值:字符串 1 和字符串 2 的字符对应的 ASCII 码的差值
5.6.2. 比较字符串(不区分大小写)
int strcasecmp(string 字符串1, string 字符串2)
5.7. 大小写
5.7.1. 将字符串转换为大写
string strtoupper(string 字符串)
5.7.2. 将字符串转换为小写
string strtolower(string 字符串)
5.7.3. 将字符串的首字符转换为大写
string ucfirst(string 字符串)
5.7.4. 将字符串的首字符转换为小写
string lcfirst(string 字符串)
5.7.5. 将字符串中的单词的首字符转换为大写
string ucwords(string 字符串[, string 单词分割符])
- 单词分割符:如果省略,则用空白字符 “ \t\v\n\r\f” 分割单词
5.8. 转换
5.8.1. 将字符串中的 ’ 、” 、\ 、NUL 转义
string addslashes(string 字符串)
5.8.2. 将字符串中的 \’、\”、\、\NUL 反转义
string stripslashes(string 字符串)
5.8.3. 将字符串中的 \n 或 \r 转换为
string nl2br(string 字符串)
- 连续的多个 \n 或 \r 转换为 1 个
5.9. 过滤
5.9.1. 去除字符串左右两边的字符
string trim(string 字符串[, string 去除的字符])
- 去除的字符:如果省略,则去除空白字符 “ \t\v\n\r\0”
5.9.2. 去除字符串左边的字符
string ltrim(string 字符串[, string 去除的字符])
5.9.3. 去除字符串右边的字符
string rtrim(string 字符串[, string 去除的字符])
5.9.4. 去除字符串中的 HTML 标记和 PHP 标记
string strip_tags(string 字符串[, string 不去除的标记])
- 不去除的标记:格式为 ‘<标记1><标记2>…’
5.10. ASCII 码
5.10.1. 获取字符对应的 ASCII 码
int ord(string 字符)
5.10.2. 获取 ASCII 码对应的字符
string chr(int ASCII码)
5.11. 加密
5.11.1. 计算字符串的 MD5 散列值
string md5(string 字符串[, bool 是否返回原始格式])
- 是否返回原始格式:可以是 true 或 false,true 返回 16 位的散列值,false 返回 32 位的散列值
5.11.2. 计算字符串的 SHA1 散列值
sha1(string 字符串[, bool 是否返回原始格式])
- 是否返回原始格式:可以是 true 或 false,true 返回 20 位的散列值,false 返回 40 位的散列值
5.12. 其它
5.12.1. 反转字符串
string strrev(string 字符串)
5.12.2. 打乱字符串
string str_shuffle(string 字符串)
5.12.3. 重复字符串
string str_repeat(string 字符串, int 重复的数量)
5.12.4. 填充字符串
string str_pad(string 字符串, int 填充后的长度[, string 填充的字符串[, int 填充的方式]])
- 填充的字符串:如果省略,则用 ‘ ’ 填充
- 填充的方式:可以是 STR_PAD_BOTH、STR_PAD_LEFT、STR_PAD_RIGHT,STR_PAD_BOTH 表示填充左右两边,STR_PAD_LEFT 表示填充左边,STR_PAD_RIGHT 表示填充右边;如果省略,则填充右边;当填充左右两边时,优先填充右边
5.12.5. 格式化字符串
string sprintf(string 格式化字符串[, mixed 参数1, mixed 参数2, ……])
- 函数不输出格式化字符串