字符串的声明
- 单引号
字符串定界符,不解析变量。\
符号在单引号中只能转义单引号和它自身,而不能解析特殊字符,如“\n,\r”,在单引号中使用双引号不用进行转义
示例:
<?php
$str='这是一个字符串';
//字符串中包含变量
echo '字符串中包含变量:{$str}<hr />';
//字符串中包含单引号和“\”符号
echo '字符串中包含单引号和反斜杠:\' \\<hr />';
//字符串中转义特殊字符
echo '字符串中转义特殊字符:\n\r<hr />';
//在单引号中使用双引号
echo '在单引号中使用双引号:"Hello World"';
当使用单引号进行字符串声明的时候,其中如果包含变量和转义特殊字符,不会去解析变量中的值以及特殊字符的含义,只会原样输出;如果在单引号中直接使用单引号和\
,会出现错误,必须使用\
进行转义
- 双引号
字符串定界符,解析变量,\
符号在双引号中不仅可以转义自身和双引号,还可以转义特殊字符,如“\n,\r”,双引号中使用单引号不用进行转义
示例:
<?php
$str="这是一个字符串";
//字符串中包含变量
echo "字符串中包含变量-变量后继续跟着英文字符,未使用变量定界符:$string<hr />";
echo "字符串中包含变量-变量后继续跟着英文字符,使用变量定界符包裹整个变量:{$str}ing<hr />";
echo "字符串中包含变量变量后继续跟着英文字符,使用变量定界符只包裹变量名:${str}ing<hr />";
//字符串中包含双引号和“\”符号
echo "字符串中包含单引号和反斜杠:\" \\<hr />";
//字符串中转义特殊字符
echo "字符串中转义特殊字符:\n\r$str<hr />";
//在双引号中使用单引号
echo "在双引号中使用单引号:'Hello World'";
在解析变量时,如果变量名称的后边有有影响变量解析的字符串,如英文字符,则需要使用变量定界符{}
进行包裹,否则会因为改变变量名而导致解析失败,变量定界符可以包裹整个变量,也可以只包裹变量名。有些特殊字符无法直接在浏览器看到效果,可以在浏览器中右击选择查看源代码,进行最终的效果查看
- heredoc
定义字符串,功能类似双引号,中间可以是字符串,也可以是HTML代码
语法:
<?php
echo <<<"EOF"
字符串或代码块
EOF;
以 <<<"EOF"开始标记
开始,以 EOF
结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号,双引号可以省略不写;开始标记和结束标记相同,比如常用大写的 EOT
、EOD
、EOF
来表示,但是不只限于那几个(也可以用:JSON、HTML等),只要保证开始标记和结束标记不在正文中出现即可;位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在 heredoc 中,变量不需要用连接符 .
或 ,
来拼接
示例:
<?php
//输出字符串
echo <<<STRING
这只是一个普通的字符串<hr />
STRING;
//输出包含变量和双引号、反斜杠
$str = "这是一个字符串变量";
echo <<<TEST2
$str'"\<hr />
TEST2;
//输出数组元素
$arr = ['name'=>'Lin','age'=>26];
echo <<<ARR
这是一个数组元素{$arr['name']}<hr />
ARR;
//传统方式输出html文档
$str='这是传统方式输出html文档';
echo '<!DOCTYPE html>';
echo '<html>';
echo '<head><title></title></head>';
echo '<body>'.$str.'</body>';
echo '</html>';
echo '<hr />';
//heredoc输出HTML
$str='这是heredoc输出html文档';
echo <<<EOF
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>$str</body>
</html>
EOF;
在输出包含大量HTML语法文档的时候,虽然使用传统方式与使用heredoc
结果相同,使用heredoc
代码更加的简单和易于阅读
- nowdoc
定义字符串,功能类似单引号引号,中间可以是字符串,也可以是HTML代码
语法:
echo <<<'EOF'
字符串或代码块
EOF;
语法与heredoc
相同,但开始标记使用的是单引号,且不可省略。在输出HTML代码时,如果没有包含要解析的变量或者是特殊字符,可以使用nowdoc
,否则建议使用heredoc
<?php
//输出字符串
echo <<<'STRING'
这只是一个普通的字符串<hr />
STRING;
//输出包含变量和双引号、反斜杠
$str = "这是一个字符串变量";
echo <<<'TEST2'
$str'"\<hr />
TEST2;
//输出数组元素
$arr = ['name'=>'Lin','age'=>26];
echo <<<'ARR'
这是一个数组元素{$arr['name']}<hr />
ARR;
//传统方式输出html文档
$str='这是传统方式输出html文档';
echo '<!DOCTYPE html>';
echo '<html>';
echo '<head><title></title></head>';
echo '<body>'.$str.'</body>';
echo '</html>';
echo '<hr />';
//nowdoc输出HTML
$str='这是nowdoc输出html文档';
echo <<<'EOF'
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>$str</body>
</html>
EOF;
部分字符串函数
html_entity_decode
,把HTML代码转为字符,返回的是一个字符串
语法:
html_entity_decode(要操作的字符串,[对单双引号的编码方式,转换时使用的字符集]);
对单双引号的编码方式
名称 | 描述 |
---|---|
ENT_COMPAT |
只解码码双引号,当该参数没有写时,这个是默认值 |
ENT_QUOTES |
解码双引号和单引号 |
ENT_NOQUOTES |
不解码双引号和单引号 |
转换时常用的字符集
名称 | 描述 |
---|---|
ISO-8859-1 |
西欧,Latin-1,默认值 |
UTF-8 |
ASCII兼容多字节8比特Unicode |
GB2312 |
简体中文 |
如果有无法识别的字符集,则会使用默认的值;如果该参数忽略不写,则也使用默认值
示例:
<?php
$str="PHP & 'Hello World~'";
//只填写一个参数时,默认只解码双引号,使用的字符集为ISO-8859-1
echo html_entity_decode($str)."\r\n";
//解码双引号与单引号
echo html_entity_decode($str,ENT_QUOTES,'UTF-8')."\r\n";
//不解码双引号和单引号
echo html_entity_decode($str,ENT_NOQUOTES,'UTF-8')."\r\n";
strtolower
,将字符串中所有的字母全部转为小写,返回的是一个字符串
语法:
strtolower(要操作的字符);
示例:
<?php
$str='ABCDEFG';
echo strtolower($str);
strtoupper
,将字符串中所有的字母全部转为大写,返回的是一个字符串
语法:
strtoupper(要操作的字符);
示例:
<?php
$str='abcdefg';
echo strtoupper($str);
str_shuffie
,将字符串中的字符顺序随机打乱,返回的是一个字符串
语法:
str_shuffle(要操作的字符串);
示例:
$str='Hello World';
echo str_shuffle($str);
strrev
,将字符倒序反转,即第一个字符变成最后一个,第二个字符变成倒数第二个,以此类推
语法:
strrev(要操作的字符串);
示例:
$str='Hello World';
echo strrev($str);
substr
,截取字符串,返回被截取的子串
语法:
substr(被操作的字符串,[开始的位置,截取的长度]);
字符串的索引,正序从0开始,倒序从-1开始。开始的位置可省略,如果省略不写,默认从0(即字符串的第一个位置)开始。截取的长度也可省略,如果省略不写,则默认截取到字符串的结尾
示例:
<?php
$str='abcdefg';
//从第一个字符开始一直到最后一个字符,返回的还是原来完整的字符不变
echo substr($str,0).'<hr />';
//只给定前两个参数,从c开始截取,一直到字符串结尾最后一个字符
echo substr($str,2).'<hr />';
//按照正序的位置开始截取,从c开始截取,共截取两个字符(返回的子串只有两个字符)
echo substr($str,2,2).'<hr />';
//按照倒序的位置开始截取,从d开始截取,共截取4个字符(返回的子串只有4个字符)
echo substr($str,-4,3).'<hr />';
substr_count
,统计在字符串中某个子串出现的次数
语法:
substr_count(被操作的字符串,要查询的子串,[开始的位置,查询的长度]);
字符串的索引,正序从0开始,倒序从-1开始。开始的位置可省略,如果省略不写,默认从0(即字符串的第一个位置)开始。查询的长度也可省略,如果省略不写,则默认查询到字符串的结尾
示例:
<?php
$str1="I study programming in PHP Chinese net";
$str2="i";
//不限定开始的位置和查询的长度
echo substr_count($str1,$str2).'<hr />';
//限定开始的位置,不限定查询的长度
echo substr_count($str1,$str2,3).'<hr />';
//从正序的位置开始查找
echo substr_count($str1,$str2,2,10).'<hr />';
//从倒序的位置开始查找
echo substr_count($str1,$str2,-8,7).'<hr />';
str_split
,将字符串拆分为数组,并指定每个元素包含的字符个数,返回的是数组
语法:
str_split(要操作的字符串,[每个元素包含的字符个数]);
不设置字符个数时,默认一个字符一个元素
示例:
<?php
$str='php.cn';
//不设置字符个数时
var_dump(str_split($str));
echo '<hr />';
//设置字符个数时
var_dump(str_split($str,2));
str_getcsv
,操作csv格式的字符串,返回结果为数组
语法:
str_getcsv(要操作的CSV格式的字符串);
示例:
<?php
var_dump(str_getcsv('1,Lin,26'));
str_pad
,将字符串填充到指定长度
语法:
str_pad(要操作的字符,要扩充到的长度,用于填充的字符串,填充的位置);
比如设置的长度为10,而字符串本身的长度只有3,那么会使用用于填充的子串将原本的字符串长度填充增加至10
填充的位置有三个:STR_PAD_LEFT
,填充在字符串的左边;STR_PAD_RIGHT
,填充在字符串的右边;STR_PAD_BOTH
,填充在字符串的两边,左右字符的个数会平均分配
示例:
<?php
$str="abc";
$str2="*";
//填充在字符串的左边
echo str_pad($str,10,$str2,STR_PAD_LEFT).'<hr />';
//填充在字符串的右边
echo str_pad($str,10,$str2,STR_PAD_RIGHT).'<hr />';
//填充在字符串的两边
echo str_pad($str,10,$str2,STR_PAD_BOTH).'<hr />';