5.3 字符串操作
本节介绍字符串的常用处理函数,包括字符串的查找、替换、截取、去空格、转义等常用函数。
5.3.1 改变字符串大小写
可以使用以下函数来改变字符串的大小写:
● Ucfirst将字符串的首字母转换为大写。
● Lcfirst将字符串的首字母转换为小写。
● Ucwords将字符串中每个单词的首字母转换为大写。
● Strtoupper将字符串转化为大写。
● Strtolower将字符串转化为小写。
示例如下:
<? php $str = 'i love you' . "<br/>"; echo ucfirst($str) . ucwords($str) . strtoupper($str); $str = 'I LOVE YOU'. "<br/>"; echo strtolower($str) . lcfirst($str); ?>
以上程序的执行结果如下:
I love you I Love You I LOVE YOU i love you i LOVE YOU
5.3.2 查找字符串
可以使用以下函数来查找字符串。
1. stripos:查找字符串中某部分字符串首次出现的位置(不区分大小写)
语法如下:
int stripos ( string $haystack , string $needle [, int $offset = 0 ] )
参数说明如下:
● haystack
在该字符串中查找。
● needle
注意,needle可以是一个单字符或者多字符的字符串。如果needle不是一个字符串,那么它将被转换为整型并被视为字符顺序值。
● offset
可选的offset参数允许指定从haystack中的哪个字符开始查找,返回的位置数字值仍然相对于haystack的起始位置。
返回needle存在于haystack字符串开始的位置(独立于偏移量),同时注意字符串位置起始于0,而不是1。
如果未发现needle就将返回false。
示例如下:
<? php $findme = 'c'; $mystring1 = 'xyz'; $mystring2 = 'ABC'; $pos1 = stripos($mystring1, $findme); $pos2 = stripos($mystring2, $findme); var_dump($pos1); var_dump($pos2); ?>
执行结果为:bool(false) int(2)。
2. strripos:计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)
语法如下:
int strripos ( string$haystack , string$needle [, int$offset=0 ] )
说明:负数偏移量将使得查找从字符串的起始位置开始,到offset位置为止。
示例如下:
<? php $findme = 'c'; $findme1 = 'C'; $mystring = 'ABCabcabcABC'; $pos1 = strripos($mystring, $findme); $pos2=strripos($mystring,$findme1); var_dump($pos1); var_dump($pos2); ?>
上述代码的执行结果为:int(11) int(11)。
3. strrpos:计算指定字符串在目标字符串中最后一次出现的位置
语法如下:
int strrpos ( string $haystack , string $needle [, int $offset = 0 ] )
说明:如果是负数的偏移量,将会导致查找在字符串结尾处开始的计数位置处结束。
示例如下:
<? php $findme='c'; $findme1='C'; $mystring='ABCabcabcABC'; $pos1=strrpos($mystring,$findme); $pos2=strrpos($mystring,$findme1); $pos3=strrpos($mystring,$findme1, -5); var_dump($pos1); var_dump($pos2); var_dump($pos3); ?>
上述代码的执行结果为:int(8) int(11) int(2)。
4. strpos:查找字符串首次出现的位置
语法如下:
mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
说明:和strrpos()、strripos()不一样,strpos的偏移量不能是负数。
示例如下:
<? php $findme='c'; $findme1='C'; $mystring='ABCabc'; $pos1=strpos($mystring,$findme); $pos2=strpos($mystring,$findme1); var_dump($pos1); var_dump($pos2); ?>
上述代码的执行结果为:int(5) int(2)。
5.3.3 替换字符串
可以对一个字符串中的特定字符或子串进行替换,这是非常常用的功能。
1.str_ireplace()和str_replace()函数
str_ireplace()和str_replace使用新的字符串替换原来字符串中指定的特定字符串,str_replace区分大小写,str_ireplace()不区分大小写。两者语法相似,str_ireplace()的语法如下:
mixed str_ireplace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
说明:该函数返回一个字符串或者数组,该字符串或数组是将subject中全部的search用replace替换(忽略大小写)之后的结果。参数count表示执行替换的次数。
使用示例如下:
<? php $str = 'hello, world, hello, world'; $replace = 'hi'; $search = 'hello'; echo str_ireplace($search, $replace, $str); ?>
执行以上代码的输出结果为:
hi,world,hi,world
2.substr_replace()函数
substr_replace()函数的语法如下:
mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
说明:substr_replace()在字符串string的副本中将由start和可选的length参数限定的子字符串使用replacement进行替换。如果start为正数,替换将从string的start位置开始。
如果start为负数,替换将从string的倒数第start个位置开始。如果设定了length参数并且为正数,就表示string中被替换的子字符串的长度。如果设定为负数,就表示待替换的子字符串结尾处距离string末端的字符个数。如果没有提供此参数,那么默认为strlen(string)(字符串的长度)。当然,如果length为0,那么这个函数的功能为将replacement插入string的start位置处。
该函数的使用示例如下:
<? php $str = 'hello, world, hello, world'; $replace = 'hi'; echo substr_replace($str, $replace, 0,5); ?>
以上代码的执行结果为:
hi,world,hello,world
5.3.4 截取字符串
PHP中使用substr截取字符串,其语法如下:
string substr ( string $string , int $start [, int $length ] )
说明:其作用是返回字符串string,由start和length参数指定的长度为length的子字符串。如果start是非负数,返回的字符串将从string的start位置开始,从0开始计算。如果start是负数,那么返回的字符串将从string结尾处向前数第start个字符开始。如果string的长度小于或等于start,就将返回false。
该函数的使用示例如下:
<? php $rest=substr("abcdef", 1); // 返回 "f" echo $rest . "<br/>"; $rest=substr("abcdef",-2); // 返回 "ef" echo $rest . "<br/>"; $rest=substr("abcdef",-3, 1);// 返回 "d" echo $rest . "<br/>"; ?>
以上代码的运行结果如下:
bcdef ef d
5.3.5 去除字符串首尾空格和特殊字符
在PHP中,使用trim()函数可以去除字符串首尾两边的空格或特殊字符,使用ltrim()和rtrim()函数将可分别去除字符串左边和右边的空格或特殊字符。这3个函数的语法分别如下:
string trim ( string $str [, string $character_mask ] ) string ltrim ( string $str [, string $character_mask ] ) string rtrim ( string $str [, string $character_mask ] )
这3个函数都是返回字符串str去除相应特定字符后的结果。str是待处理的字符串,charlist是过滤字符串。如果不指定第2个参数,trim()将去除以下字符:
●" ",普通空格符。
● "\t",制表符。
● "\n",换行符。
● "\r",回车符。
● "\0",空字节符。
●"\x0B",垂直制表符。
这3个函数的使用示例如下:
<? php $text="\t\tThese are a few words :) ... "; $binary = "\x09Example string\x0A"; $hello ="Hello World"; echo trim($text) . "<br/>"; echo rtrim($text) . "<br/>"; echo rtrim($text, " \t.") . "<br/>"; echo ltrim($hello, "H") . "<br/>"; // 删除 $binary末端的ASCII码控制字符 //(包括0~31) echo rtrim($binary, "\x00..\x1F") . "<br/>"; ?>
以上代码的执行结果为:
These are a few words :) ... These are a few words :) ... These are a few words :) ello World Example string
5.3.6 计算字符串的长度
PHP中使用strlen()函数返回字符串的长度,该函数的语法如下:
int strlen ( string $string )
使用示例如下:
<? php $str = 'abcdef'; echo strlen($str); // 6 $str = ' ab cd '; echo strlen($str); // 7 ?>
以上代码的执行结果为:
67
5.3.7 转义和还原字符串
PHP中使用addslashes函数转义字符串。该函数的语法格式如下:
string addslashes ( string $str )
说明:该函数返回转义后的字符串,在一些特殊字符前加了转义符号“\”。这些字符是单引号(')、双引号(")、反斜线(\)与NUL(NULL字符)。
一个使用addslashes()的例子是往数据库中输入数据。例如,将名字O'reilly插入数据库中,就需要对其进行转义。强烈建议使用DBMS指定的转义函数(比如MySQL是mysqli_real_escape_string(), PostgreSQL是pg_escape_string()),但是如果你使用的DBMS没有一个转义函数,并且使用 \ 来转义特殊字符,就可以使用这个函数。仅仅是为了获取插入数据库的数据,额外的 \ 并不会插入。当PHP指令magic_quotes_sybase被设置成on时,意味着插入’时将使用’进行转义。
转义字符串的示例如下:
<? php $str = "I don't love you"; echo addslashes($str); ?>
执行以上程序的结果为:
I don\'t love you
stripslashes可以还原经过addslashes转义后的字符串。示例如下:
<? php $str="I don't love you"; $str1=addslashes($str); echo$str1; echo stripslashes($str1); ?>
以上程序的执行结果为:
I don\'t love youI don't love you
5.3.8 重复一个字符串
使用str_repeat()函数可以重复一个字符串,语法如下:
string str_repeat ( string $input , int $multiplier )
说明:该函数返回input重复multiplier次后的结果。multiplier必须大于等于0,如果multiplier被设置为0,那么函数将返回空字符串。
使用示例如下:
<? php echo str_repeat("-=", 10); ?>
以上代码的执行结果为:
-=-=-=-=-=-=-=-=-=-=
5.3.9 随机打乱字符串
可使用str_shuffle()函数来随机打乱一个字符串,其语法如下:
string str_shuffle ( string $str )
说明;str_shuffle() 函数打乱一个字符串,使用任何一种可能的排序方案。该函数的使用示例如下:
<? php $str = 'abcdef'; echo str_shuffle($str) . "<br/>"; echo str_shuffle($str) . "<br/>"; echo str_shuffle($str) . "<br/>"; ?>
执行上述代码的结果为:
ecfabd debcaf bcfeda
注意,每次使用str_shuffle()函数打乱字符串都是随机的。
5.3.10 分割字符串
可以使用explode()函数将一个字符串分割成另一个字符串,其语法如下:
array explode ( string $delimiter , string $string [, int $limit ] )
说明:此函数返回由字符串组成的数组,每个元素都是string的一个子串,它们被字符串delimiter作为边界点分割出来。delimiter表示边界上的分割字符,如果设置了limit参数并且是正数,那么返回的数组包含最多limit个元素,而最后那个元素将包含string的剩余部分。如果limit参数是负数,就返回除最后的-limit个元素外的所有元素。如果limit是0,就会被当作1。
该函数的使用示例如下:
<? php $pizza ="piece1 piece2 piece3 piece4 piece5 piece6"; $pieces = explode(" ", $pizza); print_r($pieces); $input = 'hello, world'; print_r(explode(', ', $input)); ?>
上述代码的执行结果如下:
Array ( [0] => piece1 [1] => piece2 [2] => piece3 [3] => piece4 [4] => piece5[5] => piece6 )Array ( [0] => hello [1] => world )