博客列表 >字符串函数

字符串函数

雪~人胖胖
雪~人胖胖原创
2020年04月25日 19:43:41920浏览

字符串函数

[toc]

1. 字符串语法

  • 字符串上限: 2G
  • 字符串中每个字符使用一个字节表示,仅支持 256 个,不支持Unicode

  • 有四种方式创建字符串

序号 方式 描述
1 单引号 全部内容视为纯文本
2 双引号 可解析变量和转义特殊字符
3 heredoc 与双引号类似
4 nowdoc 与单引号类似

1.1 单引号

单引号 转义符 特殊字符 变量
转义 转义 不转义 不解析

1.2 双引号

  • 双引号对内容的处理
双引号 转义符 特殊字符 变量
转义 转义 转义 解析
  • 双引号中的变量, 应该使用大括号{}限定标识符识别范围,如: “{\$email}”
  • 双引号中的特殊字符列表
序号 特殊字符 描述
1 \n 换行(ASCII 字符集中的 LF 或 0x0A (10))
2 \r 回车(ASCII 字符集中的 CR 或 0x0D(13))
3 \t 水平制表符(ASCII 字符集中的 HT 或 0x09 (9))
4 \v 垂直制表符(ASCII 字符集中的 VT 或 0x0B (11))(自 PHP 5.2.5 起)
5 \e Escape(ASCII 字符集中的 ESC 或 0x1B (27))(自 PHP 5.4.0 起)
6 \f 换页(ASCII 字符集中的 FF 或 0x0C (12))(自 PHP 5.2.5 起)
7 \\ 反斜线
8 \$ 美元标记
9 \" 双引号
10 \[0-7]{1,3} 符合该正则表达式序列的是一个以八进制方式来表达的字符
11 \x[0-9A-Fa-f]{1,2} 符合该正则表达式序列的是一个以十六进制方式来表达的字符

1.3 heredoc

双引号 转义符 特殊字符 变量
不转义 不转义 转义 解析

1.4 nowedoc

单引号 转义符 特殊字符 变量
不转义 不转义 不转义 不解析

2. 打印输出函数

序号 函数 说明
1 echo 输出一个或多个字符串
2 print 输出字符串
3 printf 输出格式化字符串
4 vprintf 与 printf()区别在于参数在数组中
5 sprintf 返回格式化字符串,存入变量/文件中
6 vsprintf 与 sprintf()区别在于参数在数组中
7 fprintf 将格式化字符串写入文件流中
8 vfprintf 与 fprintf()区别在于参数使用数组
9 sscanf 根据指定格式解析输入的字符
10 number_format 以千位分隔符方式格式化一个数字

3 分割查询与替换函数

3.1 第一组

序号 函数 说明
1 implode 将一个一维数组的值转化为字符串
2 join 别名 implode
3 explode 使用一个字符串分割另一个字符串
5 substr 返回字符串的子串
6 substr_count 计算字串出现的次数
7 substr_replace 替换字符串的子串
8 str_split 将字符串转换为数组
9 str_getcsv 解析 CSV 字符串为一个数组

3.2 第二组

序号 函数 说明
10 str_pad 使用另一个字符串填充字符串为指定长度
11 str_repeat 重复一个字符串
12 str_replace 子字符串替换
13 str_ireplace str_replace 的忽略大小写版本
14 strtr 转换指定字符
15 str_shuffle 随机打乱一个字符串
16 wordwrap 打断字符串为指定数量的字串
17 trim 去除字符串首尾处的空白字符(或者其他字符)
18 rtrim 删除字符串末端的空白字符(或者其他字符)
19 ltrim 删除字符串开头的空白字符(或其他字符)
20 chop rtrim 的别名

附录 1: trim()/ltrim()/rtrim()去除的空白符列表

序号 空白符 描述
1 " " (ASCII 32 (0x20)),普通空格符
2 "\t" (ASCII 9 (0x09)),制表符
3 "\n" (ASCII 10 (0x0A)) 换行符
4 "\r" (ASCII 13 (0x0D))回车符
5 "\0" (ASCII 0 (0x00))空字节符
6 "\x0B" (ASCII 11 (0x0B))垂直制表符

3.3 第三组

序号 函数 说明
21 strpos 查找字符串首次出现的位置
22 stripos 查找字符串首次出现的位置(忽略大小写)
23 strripos 计算指定字符串在目标字符串中最后一次出现的位置(忽略大小写)
24 strrpos 计算指定字符串在目标字符串中最后一次出现的位置)
25 strstr 查找字符串的首次出现
26 stristr strstr 函数的忽略大小写版本
27 strrchr 查找指定字符在字符串中的最后一次出现
28 strchr 别名 strstr
29 strpbrk 在字符串中查找一组字符的任何一个字符
30 strspn 计算字符串中全部字符都存在于指定字符集合中的第一段子串的长度
31 strtolower 将字符串转化为小写
32 strtoupper 将字符串转化为大写
33 lcfirst 使一个字符串的第一个字符小写
34 ucfirst 将字符串的首字母转换为大写
35 ucwords 将字符串中每个单词的首字母转换为大写
36 strlen 获取字符串长度
37 strrev 反转字符串
38 strip_tags 从字符串中去除 HTML 和 PHP 标记

4. URL 处理函数

序号 函数 说明
1 parse_str 将字符串解析成多个变量,处理 url
2 parse_url 解析 URL,返回其组成部分
3 http_build_query 生成 URL-encode 之后的请求字符串
4 urldecode 解码已编码的 URL 字符串
5 urlencode 编码 URL 字符串
6 base64_encode MIME base64 数据解码
7 base64_decode MIME base64 数据编码

附录 1: $_SERVER预定义变量

以 URL 为例: http://php.io/case/demo12.php/m/admin/c/add?id=5&name=admin

序号 变量 描述 示例
1 UNIQUE_ID HTTP 请求的唯一标识符 Xn4DhH8AAAEAAAWiEO0AAAAB
2 HTTP_HOST HTTP 主机名/域名 php.io
3 SERVER_ADDR HTTP 主机名 IP 地址 127.0.0.1 / 0:0:0:1 / ::1
4 SERVER_PORT Web 服务器使用的端口 80
5 REMOTE_PORT 用户机器连接到 Web 服务器的端口号 52706
6 SERVER_NAME Appcha 配置的 ServerName php.io
7 DOCUMENT_ROOT 当前脚本所在的根目录(配置文件中) /Documents/web/php/case
8 SCRIPT_FILENAME 当前执行脚本的绝对路径 /Documents/web/php/case/demo1.php
9 SCRIPT_NAME 当前执行脚本的路径与文件名 /case/demo1.php
10 PHP_SELF 当前脚本名(含 pathinfo) /case/demo1.php/m/admin/c/add
11 PATH_INFO 执行脚本与查询字符串之间的路径信息 /m/admin/c/add
12 PATH_TRANSLATED 脚本所在文件系统路径(限 pathinfo) /Documents/web/php/m/admin/c/add
13 REQUEST_URI 当前访问的 URL(pathinfo,查询字符串) case/demo1.php/m/admin/c/add?id=5&…
14 QUERY_STRING 查询字符串(不含前导问号?) id=5&name=admin
15 REQUEST_METHOD HTTP 请求类型 POST / GET
16 HTTP_REFERER 引导用户进入当前页面的 URL 如果是直接进入当前页,则不存在该值
17 HTTP_USER_AGENT 客户端/浏览器信息get_browser() Mozilla/5.0 (Macintosh; Intel Mac …
18 SERVER_SOFTWARE web 服务器软件 Apache
19 SERVER_PROTOCOL web 服务器 HTTP 协议 HTTP/1.1
20 GATEWAY_INTERFACE 网关接口:服务器使用 CGI 规范 CGI/1.1
21 REQUEST_TIME HTTP 请求开始的时间戳 1585320730
22 REQUEST_TIME_FLOAT HTTP 请求开始的时间戳(微秒级) 1585320730.803
23 argv 传递给脚本的参数数组 Array ( [0] => id=5&name=admin )
24 argc 传递给脚本的参数数量 1
25 HTTP_ACCEPT 客户端请求/接受文档类型 text/html,application/xhtml+xml,appli…
26 HTTP_ACCEPT_ENCODING HTTP 压缩 HTML 的编码方式 gzip, deflate
27 HTTP_ACCEPT_LANGUAGE HTTP 接受的语言 zh-CN,zh;q=0.9,en;q=0.8,ja;q=0.7

附录 2: urlencode():对 url 变量值进行编码

除了-\_.之外的所有字符 空格 编码方式
%+2 位 16 进制数 + application/x-www-form-urlencoded

附录 3: base64_encode():用 base64 对 data 进行编码

  • 为了使二进制数据可以通过非纯 8-bit 的传输层传输,例如电子邮件的主体
  • 下载链接, 图片等都可以使用它进行加密处理
  • 加密之后的数据比原始数据要多占据 33%的空间大小

附录 4: Data URI Scheme(协议)

形如:data:text/jpeg;base64,/9j/4AAQSkZJRgABA... 这样的资源链接

序号 协议 说明
1 data: 文本数据
2 data:text/plain, 文本数据
3 data:text/html, HTML 代码
4 data:text/css;base64, css 代码
5 data:text/javascript;base64, javascript 代码
6 data:image/x-icon;base64, base64 编码的 icon 图片数据
7 data:image/gif;base64, base64 编码的 gif 图片数据
8 data:image/png;base64, base64 编码的 png 图片数据
9 data:image/jpeg;base64, base64 编码的 jpeg 图片数据

5. HTML 相关

序号 函数 说明
1 htmlspecialchars 将特殊字符转换为 HTML 实体
2 htmlspecialchars_decode 将特殊的 HTML 实体转换回普通字符
3 htmlentities 将字符转换为 HTML 转义字符
4 html_entity_decode 将 HTML 实体转换为它们相应的字符
5 nl2br 在字符串所有新行之前插入 HTML 换行标记

附录 1: html 实体字符

  • 某些字符在 html 文档中有特殊意义,如<>用表示元素标签,这些都是预留字符,不能直接使用
  • 如果要在 html 文档中正确显示他们,需要将它们转为html 实体字符,如<转为<
  • html 实体字符有二种表示方法: 1. 命名表示法,如<, 2. 编码表示法, 如&60;
  • 常用实体字符列表:
序号 描述 实体名称 实体编码
1 ' ' 空格
2 < 小于号 < <
3 > 大于号 > >
4 & 和号 & &
5 " 双引号 " "
6 ' 单引号 ' '
7 分(cent) ¢ ¢
8 £ 镑(pound) £ £
9 ¥ 元(yen) ¥ ¥
10 欧元(euro)
11 § 小节 § §
12 © 版权(copyright) © ©
13 ® 注册商标 ® ®
14 商标
15 × 乘号 × ×
16 ÷ 除号 ÷ ÷

附录 2: htmlspecialchars()转换字符列表

序号 原字符 替换成
1 & &
2 " "
3 ' '
4 < <
5 > >

如果要转换的字符超出以上列表,请使用: htmlentities()

附录 3: 转换时的 FLAG 常量

序号 常量 描述
1 ENT_COMPAT 会转换双引号,不转换单引号
2 ENT_QUOTES 既转换双引号也转换单引号
3 ENT_NOQUOTES 单/双引号都不转换
4 ENT_SUBSTITUTE 替换无效的代码单元序列为 Unicode 代替符
5 ENT_DISALLOWED 为文档的无效代码点替换为 Unicode 代替符
6 ENT_HTML401 以 HTML 4.01 处理代码
7 ENT_XML1 以 XML 1 处理代码
8 ENT_XHTML 以 XHTML 处理代码
9 ENT_HTML5 以 HTML 5 处理代码

6. 转码相关函数

序号 函数 说明
1 chr 返回指定的字符
2 ord 转换字符串第一个字节为 0-255 之间的值
3 chunk_split 将字符串分割成小块
4 bin2hex 函数把包含数据的二进制字符串转换为十六进制值
5 hex2bin 转换十六进制字符串为二进制字符串
7 convert_uuencode 将所有(含 2 进制)字符串转为可打印字符便于网络安全传输
6 convert_uudecode 将 convert_uuencode 编码的字符串解析还原(反操作)
8 count_chars 返回字符串所用字符的信息(每个字符出现的次数)
9 quotemeta 转义元字符集: . \ + * ? [ ^ ] ( $ )
  • count_chars() 的模式符:
序号 模式符 说明
1 0 以所有的每个字节值作为键名, 出现次数作为值的数组
2 1 与 0 相同,但只列出出现次数大于零的字节值
3 2 与 0 相同,但只列出出现次数等于零的字节值
4 3 返回由所有使用了的字节值组成的字符串
5 4 返回由所有未使用的字节值组成的字符串
  • quotemeta(): 预定义的字符前添加反斜线\
  • 预定义字符列表(在正则中具有特殊语义)
序号 字符 说明
1 . 圆点
2 \ 反斜线
3 + 加号
4 * 星号
5 ? 问号
6 [] 方括号
7 ^ 脱字符
8 $ 美元符
9 () 圆括号

7. 哈希相关函数

序号 函数 说明
1 md5_file 计算指定文件的 MD5 散列值
2 md5 计算字符串的 MD5 散列值
3 sha1_file 计算文件的 sha1 散列值
4 sha1 计算字符串的 sha1 散列值
5 crypt 单向字符串散列
6 crc32 计算一个字符串的 crc32 多项式
7 str_rot13 对字符串执行 ROT13 转换

8. 统计与比较函数

序号 函数 说明
1 strspn 返回字符串与掩码中字符串匹配的字符数量
2 strcspn 返回第一个字符串中, 找到与掩码字符之前的字符数量
3 str_word_count 返回字符串中单词的使用情况
4 substr_compare 二进制安全比较字符串(从偏移位置比较指定长度)
5 strcmp 二进制安全字符串比较
6 strncmp 二进制安全比较字符串开头的若干个字符
7 strcasecmp 二进制安全比较字符串(不区分大小写)
8 strncasecmp 二进制安全比较字符串开头的若干个字符(不区分大小写)

代码

  1. <?php
  2. //1.打印
  3. //打开文件test1.txt没有的话会创建
  4. $handle = fopen('test1.txt','w') or die('open fail');
  5. //写入一个根据 format 格式化后的字符串到由 handle 句柄打开的流中。
  6. fprintf($handle, sprintf('SELECT * FROM `%s` LIMIT %d', 'base', 500));
  7. echo file_get_contents('test1.txt');
  8. echo '<br>';
  9. echo number_format(1234.895,2);
  10. echo '<hr>';
  11. $var = implode('-', ['username', 'password', 'port', 'host']);
  12. // printf('<pre>%s</pre>',print_r(explode('-', $var, 2), true) ) ;
  13. $var_a = explode('-', $var, 3);
  14. unset($var_a['2']);
  15. printf('<pre>%s</pre>', print_r($var_a, true));
  16. //2.strpbrk — 在字符串中查找一组字符的任何一个字符
  17. $str2 = 'This is a test!';
  18. echo strpbrk($str2, 'si');//在这里是'i'先找到,所以输出的是'is is a test!'
  19. //3.strspn — 计算字符串中全部字符都存在于指定字符集合中的第一段子串的长度。
  20. echo strspn("42 is the answer", "1234");
  21. //42是1234中的输出2
  22. //4.parse_str — 将字符串解析成多个变量 第二个参数带result,否则报错
  23. $var = 'name=peter&id=2&grade=66';
  24. parse_str($var, $get);
  25. printf('<pre>%s</pre>', print_r($get, true));
  26. 5.//strpos 查找字符串首次出现的位置
  27. echo strpos('aabbbcc', 'ab');//'ab'是要查找的字符串,返回1
  28. 6.//parse_url解析url,返回组成部分
  29. print_r(parse_url('https://baike.baidu.com/item/%E7%9F%A5%E8%AF%86/74245?fr=aladdin')) ;
  30. //打印Array ( [scheme] => https [host] => baike.baidu.com [path] => /item/%E7%9F%A5%E8%AF%86/74245 [query] => fr=aladdin )
  31. 7.//str_replace子字符串替换
  32. echo str_replace('f', 'U', 'aaabcdfdfgfd');//第一个参数是查找的目标可为数组,第二个参数是替换的值,第三个是要替换的字符串,第四个可选参数是替换的次数
  33. 8.//strip_tags去除HTML和PHP标记
  34. echo strip_tags('<p>1358</p><a herf=>5895</a>');
  35. //第二个可选参数是不被去除的标记
  36. 9.//strstr — 查找字符串的首次出现
  37. //返回abcde从c第一次出现的位置开始到结尾的字符串
  38. echo strstr('abcde', 'c');
  39. 10.//strrev反转字符串
  40. //返回dcba
  41. strrev('abcd');

感想

字符串函数有很多,多看看手册熟悉这些函数,努力记忆。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议