字符串的单引号和双引号
字符串是指一连串不中断的字符。这里的字符主要包括以下类型:
- 字母类型,如常见的a、b、c等。
- 数字类型,如常见的1、2、3等。
- 特殊字符类型,如常见的#、%、^、$等
- 不可见字符类型,如回车符、Tab字符和换行符等。
标识字符串通常使用单引号或双引号,表面看起来没有什么区别。但是,对于存在与字符串中的变量,这两个是不一样的。
-
双引号内会输出变量的值。单引号内直接显示变量名称。
-
双引号可以通过“\"转义符输出的特殊字符如下。
- \n:新一行。
- \t:Tab。
- \\:反斜杠。
- \0:ASCII码的0。
- \$:把此符号转义为单纯的美元符号,而不再作为声明变量的标识符。
- \r:回车。
- \{octal #}:八进制转义
- \x{hexadecimal #}:十六进制转义。
-
单引号中可以通过"\"转义符输出的特殊字符只有:
- \’:转义为单引号本身,而不作为字符串标识符。
- \\:用于在单引号钱的反斜杠转义为其本身。
【单双引号使用示例】
<?php
$message = "PHP是世界上最好的语言"; // 定义字符串变量
echo "这是关于字符串的程序。<br />"; // 输出字符串
echo "这是一个关于双引号和\$的$message<br />"; // 使用转义字符,双引号中的变量被解析
$message2 = '字符串的程序。'; // 使用单引号赋值字符串变量
echo '这是一个关于字符串的程序。<br />'; // 输出字符串
echo '这是一个关于单引号的$message2'; // 单引号中的变量不被解析
echo $message2;
?>
以上代码输出如下:
字符串的连接符
字符串的连接符使用十分常见,这个连接符就是“.”(点),即可以连接两个字符串,也可以连接两个字符串变量,还可以连接字符串和字符串变量。
字符串的基本操作
字符串的基本操作主要包括对字符串的格式化处理、连接切分字符串、比较字符串、字符串子串的对比与处理等。
手动和自动转义字符串中的字符
手动转义:在引号内通过“\”(反斜杠)使一些特殊字符转义为普通字符。
自动转义:通过PHP的内置函数addslashes()
完成,还原操作则是通过stripslashes()
来完成。
addslashes()函数
(PHP4, PHP5, PHP7)
说明:
addslashes(string $str):string
返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。
参数:
str:需要转义的字符。
返回值:
返回转义后的字符。
stripslashes()函数
(PHP4, PHP5, PHP7)
说明:
stripslashes(string $str):string
反引用一个引用字符串。
如果
magic_quotes_sybase
项开启,反斜线将被去除,但是两个反斜线将会被替换成一个。
参数:
str:输入字符串。
返回值:
返回一个去除转义反斜线后的字符串。
计算字符串的长度
使用strlen()
函数可以计算字符串长度。
说明:
strlen(string $string):int
返回给定的字符串string的长度。
参数:
string:需要计算长度的字符串
返回值:
成功则返回字符串string的长度;如果string为空,则返回0。
【字符串长度计算示例】
<?php
// 定义字符串变量
$input = "这个字符串的长度不长。";
$length = strlen($input); // 获取字符串变量的长度
if (strlen($input) > 50) {
echo "输入的字符串的长度不能大于50个字符。";
}else{
echo "允许输入字符串的长度,此字符串长度为$length";
}
?>
以上代码输出为:
在php中,中文在不同编码下所占字节数不相同,在GBK/GB2312编码下一个中文占2个字节,UTF-8/unicode编码下一个中文占3个字节。
字符串单词统计
使用str_word_count()
函数可以实现字符串单词统计功能,但是这个函数只对基于ASCII码的英文档次起作用,并不对UTF8的中文字符起作用。
说明:
str_word_count(string $string[, int $format=0[, string $charlist]]):mixed
统计string 中单词的数量。如果可选的参数format没有被指定,那么返回值是一个代表单词数量的整型数。如果指定了format参数,返回值将是一个数组,数组的内容则取决于format参数。
参数:
string:字符串
format:指定函数的返回值。当前支持的值如下:
- 0 - 返回单词数量
- 1 - 返回一个包含string中全部单词的数组
- 2 - 返回关联数组。数组的键是单词在string中出现的数值位置,数组的值是这个单词
charlist:附加的字符串列表,其中的字符将被视为单词的一部分。
返回值:
返回一个数组或整型数,这取决于format参数的选择。
清理字符串中的空格
清除空格要用到ltrim()
、rtrim()
和trim()
函数。其中ltrim()
是从左边清楚字符串头部的空格,rtrim()
是从右边清除字符串尾部的空格,trim()
则是从字符串两边同时去除头尾的空格。
ltrim()
函数
说明:
ltrim(string $str[, string $character_mask]):string
删除字符串开头的空白字符(或其他字符)并返回
参数:
str:输入的字符串。
character_mask:通过参数character_mask,可以指定想要删除的字符,简单地列出想要删除的字符即可。使用..
,可以指定字符的范围。
返回值:
该函数返回一个删除了str最左边的空白字符的字符串。如果不使用第二个参数,ltrim()
仅删除一下字符:
- " "(ASCII 32(0x20)),普通空白字符。
- “\t”(ASCII 9(0x09)),制表符。
- “\n”(ASCII 10(0x0A)),换行符。
- “\r”(ASCII 13(0x0D)),回车符。
- “\0”(ASCII 0(0x00)),NUL空字节符。
- “\x0B”(ASCII 11(0x0B)),垂直制表符。
rtrim()
函数
说明:
rtrim(string $str[, string $character_mask]):string
该函数删除str末端的空白字符(或者其他字符)并返回。
参数:
str:输入的字符串。
character_mask:通过参数character_mask,可以指定想要删除的字符,简单地列出想要删除的字符即可。使用..
,可以指定字符的范围。
返回值:
该函数返回一个删除了str最左边的空白字符的字符串。如果不使用第二个参数,ltrim()
仅删除一下字符:
- " "(ASCII 32(0x20)),普通空白字符。
- “\t”(ASCII 9(0x09)),制表符。
- “\n”(ASCII 10(0x0A)),换行符。
- “\r”(ASCII 13(0x0D)),回车符。
- “\0”(ASCII 0(0x00)),NUL空字节符。
- “\x0B”(ASCII 11(0x0B)),垂直制表符。
trim()
函数
说明:
trim(string $str[, string $character_mask = "\t\n\r\0\x0B"]):string
此函数返回字符串str去除首位空白字符后的结果。如果不指定第二个参数,trim()
将去除这些字符:
- " "(ASCII 32(0x20)),普通空白字符。
- “\t”(ASCII 9(0x09)),制表符。
- “\n”(ASCII 10(0x0A)),换行符。
- “\r”(ASCII 13(0x0D)),回车符。
- “\0”(ASCII 0(0x00)),NUL空字节符。
- “\x0B”(ASCII 11(0x0B)),垂直制表符。
参数:
str:待处理的字符串。
character_mask:可选参数,过滤字符也可由character_mask参数指定。一般要李处所有希望过滤的字符,也可以使用“..
”列出一个字符范围。
返回值:
过滤后的字符串。
字符串的切分与组合
字符串的切分使用explode()
和strtok()
函数。切分的反向操作为组合,使用implode()
和join()
函数。
explode()
函数
说明:
explode(string $delimiter, string $string [, int $limit]):array
此函数返回由字符串组成的数组,每个元素都是string的一个子串,它们被字符串delimiter作为边界点分隔出来。
参数:
delimiter:边界上的分隔字符。
string:输入的字符串。
limit:如果设置了limit参数并且是整数,则返回的数组包含最多limit个元素,而最后那个元素将包含string的剩余部分。如果limit参数是负数,则返回除了最后的-limit个元素外的所有元素。如果limit是0,则会被当做1。
返回值:
此函数返回由字符串组成的array,每个元素都是string的一个子串,它们被字符串delimiter作为边界点分隔出来。
如果delimiter为空字符串(""),explode()
将返回FALSE。如果delimiter所包含的值在string中找不到,并且使用了负数的limit,那么会返回空的array,否则返回包含string单个元素的数组。
strtok()
函数
说明:
strtok(string $str, string $token):string
strtok(string $token):string
strtok()
将字符串str分隔为若干子字符串,每个字符串以token中的字符分割。如可以使用空格将"This is an example string"分割成独立的单词。
注意:仅第一次调用strtok
函数时使用string参数,后来每次调用strtok
,都将只使用token参数,因为它会记住它在字符串string中的位置。如果要重新开始分割一个新的字符串,需要再次使用string来调用strtok
函数,以便完成初始化工作。可以在token参数中使用多个字符。字符串将被该参数中任何一个字符分割。
参数:
str:原始字符串。
token:分割str时使用的分界字符。
返回值:
标记 的字符串。
implode()
函数
说明:
implode(string $glue, array $pieces):string
implode(array $pieces):string
用glue将一维数组的值连接为一个字符串。
参数:
glue:默认为空的字符串。
pieces:想要转换的数组。
返回值:
返回一个字符串,其中内容由glue分割开的数组的值。
注释:
此函数可以安全用于二进制对象。
join()
函数
说明:
此函数是implode()
函数的别名。
【示例】
<?php
// 定义字符串变量
$input = "How_to_split_this_sentance.";
// 定义按空格查分的字符串
$input2 = "把 这个句子 按空格 拆分。";
// 切分字符串input
$a = explode('_', $input);
// 输出切分后的字符串
print_r($a);
$b = explode(' ', $input2);
print_r($b);
echo implode('>', $a)."<br />";
echo implode('*', $b);
?>
程序运行结果:
字符串的截取
substr()
函数
说明:
substr(string $string, int $start [, int $length]):string
返回字符串string由start和length参数指定的子字符串。
参数:
string:输入字符串。必须至少有一个字符。
start:如果start是非负数,返回的字符串将从string的start位置开始,从0开始计算。如在字符串"abcdef"中,在位置0的字符是"a",位置2的字符串是"c"。如果start是负数,返回的字符串将从string结尾处向前数第start个字符开始。如果string的长度小于start,将返回FALSE。
length:如果提供了整数的length,返回的字符串将从start处开始最多包括length个字符(取决于string的长度)。如果提供了负数的length,那么string末尾处的length个字符将会被省略(若start是负数则从字符串尾部算起)。如果start不在这段文本中,那么将返回FALSE。如果提供值为0,FALSE或NULL的length,那么将返回一个空字符串。如果没有提供length,返回的子字符串将从start位置开始直到字符串结尾。
返回值:
返回提取的子字符串,或者失败时返回FALSE。
【示例】
<?php
echo substr('abcdef', 1); // bcdef
echo substr('abcdef', 1, 3); // bcd
echo substr('abcdef', 0, 4); // abcd
echo substr('abcdef', 0, 8); // abcdef
echo substr('abcdef', -1, 1); // f
// 访问字符串中的单个字符
// 也可以使用中括号
$string = 'abcdef';
echo $string[0]; // a
echo $string[3]; // d
echo $string[strlen($string) -1]; // f
?>
字符串替换
substr_replace()
函数
说明:
substr_replace(mixed $string, mixed $replacement, mixed $start [, mixed $length]):mixed
substr_replace()
在字符串string的副本中将由start和可选的length参数限定的子字符串使用replacement进行替换。
参数:
string:输入字符串。
replacement:替换字符串。
start:如果start为整数,替换将从string的start位置开始。如果start为负数,替换将从string的倒数第start个位置开始。
length:如果设定了这个参数并且为正数,表示string种被替换的子字符串的长度。如果设定为负数,它表示替换的子字符串结尾处距离string末端的字符个数。如果没有提供此参数,那么它默认为strlen(string)
(字符串的长度)。如果length为0,那么这个函数的功能为将replacement插入到string的start位置处。
返回值:
返回结果字符串。如果string是个数组,那么也将返回一个数组。
字符串查找
strstr()
函数
说明:
strstr(string $haystack, mixed $needle [, bool $before_needle=FALSE]):string
返回haystack字符串从needle第一次出现的位置开始到haystack结尾的字符串。
该函数区分大小写。如果想要不区分大小写,应使用
stristr()
。如果仅仅想确定needle是否在haystack中,请使用速度更快、耗费内存更少的
strpos()
函数。
参数:
haystack:输入字符串。
needle:如果needle不是一个字符串,那么它将被转化为整型并且作为字符的序号来使用。
before_needle:若为TRUE,strstr()
将返回needle在haystack中的位置之前的部分。
返回值:
返回字符串的一部分或者FALSE(如果未发现needle)。
【示例】
<?php
$email = 'name@example.com';
$domain = strstr($email, '@');
echo $domain.'<br />'; // 打印@example.com
$user = strstr($email, '@', true); // 从PHP5.3.0起
echo $user; //打印name
?>
stristr()
函数
说明:
stristr(string $haystack, mixed $needle[, bool $before_needle=FALSE]):string
该函数是strstr()
函数的忽略大小写版本。
strpos()
函数
查找字符串首次出现的位置
说明:
strpos(string $haystack, mixed $needle[, int $offset=0]):int
返回needle在haystack中首次出现的数字位置。
参数:
haystack:在该字符串中进行查找。
needle:如果needle不是一个字符串,那么它将被转换为整型并视为字符的顺序值。
offset:如果提供了此参数,搜索会从字符串该字符数的起始位置开始统计。如果是负数,搜索会从字符串结尾指定字符数开始。
返回值:
返回needle存在与haystack字符串其实的位置(独立于offset)。同时注意字符串位置是从0开始,而不是从1开始的。如果没找到needle,将返回FALSE。(PHP7.1.0 开始支持负数的offset)。
【字符串查找示例】
<?php
$input = "I have a Dream that to find a string with a dream.";
$input2 = "我有一个梦想,能够找到理想。";
echo strstr($input, "dream")."<br />"; // 输出dream
echo stristr($input, "dream")."<br />"; // 输出Dream that to find a string with a dream.
echo strstr($input, "that")."<br />"; // 输出that to find a string with a dream
echo strstr($input2, "梦想")."<br />"; // 输出梦想,能够找到理想。
?>
大小写转换
常见的大小写转换函数有strtolower()
、strtoupper()
、ucfirst()
、ucwords()
。
strtolower()
函数
将字符串转化为小写
说明:
strtolower(string $string):string
将string中所有的字母字符转换为小写并返回。
注意:“字母”与当前所在区域有关。例如,在默认的“C”区域,字符umlaut-A(?)就不会被转换。
参数:
string:输入字符串
返回值:
返回转换后的小写字符串。
strtoupper()
函数
将字符串转换为大写
说明:
strtoupper(string $string):string
将string中所有的字母字符转换为大写并返回。
注意:“字母”与当前所在区域有关。例如,在默认的“C”区域,字符umlaut-a(?)就不会被转换。
参数:
string:输入字符串
返回值:
返回转换后的大写字符串。
ucfirst()
函数
将字母串的首字母转换为大写
说明:
ucfirst(string $str):string
将str的首字符(如果首字符是字母)转换为大写字母,并返回这个字符串。
注意:“字母”与当前所在区域有关。例如,在默认的“C”区域,字符umlaut-a(?)就不会被转换。
参数:
str:输入字符串
返回值:
返回结果字符串。
ucwords()
函数
将字符串中每个单词的首字母转换为大写
说明:
ucwords(string $str [, string $delimiters="\t\r\n\f\v"]):string
将str中每个单词的首字符(如果首字符是字母)转换为大写字母,并返回这个字符串。
这里单词的定义要紧跟在delimiters参数(默认:空格、制表符、换行符、回车符、水平线以及竖线)之后的子字符串。
参数:
str:输入字符串。
delimiters:可选的delimiters,包含了单词分割字符。
返回值:
返回转换后的字符串。
此函数可以安全用于二进制对象