字符串函数学习总结
课堂案例不做演示
1. 字符串语法
序号 |
方式 |
描述 |
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(功能和双引号相似)
双引号 |
转义符 |
特殊字符 |
变量 |
不转义 |
不转义 |
转义 |
解析 |
适合大量的 html 和 php 代码输出
1.4 nowedoc(和单引号类似)
单引号 |
转义符 |
特殊字符 |
变量 |
不转义 |
不转义 |
不转义 |
不解析 |
适合大量的 php 代码输出,不需要转义
经常用于初始化类属性和类常量,凡是需要静态数据的场景下都可以用
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 |
以千位分隔符方式格式化一个数字 |
- 区分小技巧,经常会不知道这些打印输出函数的区别,在这里我总结了以下几点
- 1.v 表示的就是数组
- 2.s 表示的就是字符串(string)
- 3.f 表示的是格式化(format)
3 分割查询与替换函数
3.1 第一组
序号 |
函数 |
说明 |
1 |
implode |
将一个一维数组的值转化为字符串 |
2 |
join |
别名 implode |
3 |
explode |
explode() 函数把字符串打散为数组。 |
5 |
substr |
返回字符串的子串 |
6 |
substr_count |
计算子串出现的次数 |
7 |
substr_replace |
替换字符串的子串 |
8 |
str_split |
将字符串转换为数组 |
9 |
str_getcsv |
解析 CSV 字符串为一个数组 |
join 常用于 js
substr_count 统计英文字符串比较多
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 标记 |
3.3.1 strpos() 函数
- strpos() 函数:strpos() 函数查找字符串在另一字符串中第一次出现的位置。
语法:strpos(string/需要查找的字符串,查找得内容,起始位置)
strpos() 函数对大小写敏感 - stripos() 函数查找字符串在另一字符串中第一次出现的位置(不区分大小写)
- strrpos() 函数查找字符串在另一字符串中最后一次出现的位置(区分大小写)
- strripos() 函数查找字符串在另一字符串中最后一次出现的位置(不区分大小写)
<?php
echo strpos("I love php","p");
//运行结果在第八个位置
//stripos() 函数是不区分大小写的。
echo stripos("I love php,do you love PHP?","PHP");
echo strrpos("I love php","p");
echo strripos("I love php,do you love PHP?","PHP");
?>
注释:字符串位置从 0 开始,不是从 1 开始。
3.3.2 strstr() 函数
- strstr() 函数搜索字符串在另一字符串中是否存在,如果是,返回该字符串及剩余部分,否则返回 FALSE。strstr(string,search,before_search),最后一个参数的默认值是 false,如果设置为 “true”,它将返回 search 参数第一次出现之前的字符串部分。
- stristr() 函数搜索字符串在另一字符串中的第一次出现(不区分大小写)
- strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
- strchr() 函数是 strstr() 函数的别名
<?php
// strstr()函数
echo strstr('Do you think php is a good php language', 'php');
echo '<hr>';
echo stristr('Do you think PHP is a good php language', 'php');
3.3.3 strpbrk() 函数在字符串中搜索指定字符中的任意一个
<?php
echo strpbrk('I love php', 'ph');
echo "<br>";
3.3.4 strspn() 函数返回在字符串中包含要查找参数中指定字符的数目
<?php
echo strspn("Hello woorld!", "kHlleo");
// 输出6个
3.3.5 strtolower()和 strtoupper()
- strtolower() 函数把字符串转换为小写
- strtoupper() 函数把字符串转换为大写。
<?php
echo strtoupper("Hello WORLD!");
echo '<hr>';
echo strtolower("Hello WORLD!");
3.3.6 lcfirst()和 ucfirst()以及 ucwords()
<?php
echo lcfirst("Hello PHP!");
echo ucfirst("hello PHP!");
echo ucwords("hello pHP i love you!");
?>
3.3.7 strrev() 函数反转字符串
<?php
echo strrev("I love 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 |
转义元字符集: . \ + * ? [ ^ ] ( $ ) |
序号 |
模式符 |
说明 |
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 |
二进制安全比较字符串开头的若干个字符(不区分大小写) |
代码演示
- strcspn() 函数返回在找到任何指定的字符之前,在字符串查找的字符数(包括空格)
<?php
echo strcspn("Hello php!","p");
- str_word_count() 函数计算字符串中的单词数。
<?php
echo str_word_count("I love php!");
- substr_compare() 函数从指定的开始位置比较两个字符串。
<?php
echo substr_compare("php", "p", 0);
- strcmp() 函数比较两个字符串(区分大小写)
<?php
echo strcmp("Hello world!", "Hello World!");
- strncmp() 函数比较两个字符串(区分大小写)
<?php
echo strncmp("China","China",6);
echo "<br>";
echo strncmp("China","CHINA",6);
总结
- 本节课非常重要,使用场景很多,也是一个比较易懂的知识,将来大部分都将使用到字符串的函数。在这里并没有对老师课堂讲到的案例进行演示,只演示了课堂上没有时间讲到的内容,目前所有字符串相关的函数都在本片博文,希望可以给未来的自己和大家带来帮助。
Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:把笔记发一遍意义不大, 关键是发代码