字符串函数
[toc]
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
双引号 |
转义符 |
特殊字符 |
变量 |
不转义 |
不转义 |
转义 |
解析 |
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 |
转义元字符集: . \ + * ? [ ^ ] ( $ ) |
序号 |
模式符 |
说明 |
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 |
二进制安全比较字符串开头的若干个字符(不区分大小写) |
代码
<?php
//1.打印
//打开文件test1.txt没有的话会创建
$handle = fopen('test1.txt','w') or die('open fail');
//写入一个根据 format 格式化后的字符串到由 handle 句柄打开的流中。
fprintf($handle, sprintf('SELECT * FROM `%s` LIMIT %d', 'base', 500));
echo file_get_contents('test1.txt');
echo '<br>';
echo number_format(1234.895,2);
echo '<hr>';
$var = implode('-', ['username', 'password', 'port', 'host']);
// printf('<pre>%s</pre>',print_r(explode('-', $var, 2), true) ) ;
$var_a = explode('-', $var, 3);
unset($var_a['2']);
printf('<pre>%s</pre>', print_r($var_a, true));
//2.strpbrk — 在字符串中查找一组字符的任何一个字符
$str2 = 'This is a test!';
echo strpbrk($str2, 'si');//在这里是'i'先找到,所以输出的是'is is a test!'
//3.strspn — 计算字符串中全部字符都存在于指定字符集合中的第一段子串的长度。
echo strspn("42 is the answer", "1234");
//42是1234中的输出2
//4.parse_str — 将字符串解析成多个变量 第二个参数带result,否则报错
$var = 'name=peter&id=2&grade=66';
parse_str($var, $get);
printf('<pre>%s</pre>', print_r($get, true));
5.//strpos 查找字符串首次出现的位置
echo strpos('aabbbcc', 'ab');//'ab'是要查找的字符串,返回1
6.//parse_url解析url,返回组成部分
print_r(parse_url('https://baike.baidu.com/item/%E7%9F%A5%E8%AF%86/74245?fr=aladdin')) ;
//打印Array ( [scheme] => https [host] => baike.baidu.com [path] => /item/%E7%9F%A5%E8%AF%86/74245 [query] => fr=aladdin )
7.//str_replace子字符串替换
echo str_replace('f', 'U', 'aaabcdfdfgfd');//第一个参数是查找的目标可为数组,第二个参数是替换的值,第三个是要替换的字符串,第四个可选参数是替换的次数
8.//strip_tags去除HTML和PHP标记
echo strip_tags('<p>1358</p><a herf=>5895</a>');
//第二个可选参数是不被去除的标记
9.//strstr — 查找字符串的首次出现
//返回abcde从c第一次出现的位置开始到结尾的字符串
echo strstr('abcde', 'c');
10.//strrev反转字符串
//返回dcba
strrev('abcd');
感想
字符串函数有很多,多看看手册熟悉这些函数,努力记忆。