主要包括以下方面:

  • 字符串的格式化
  • 字符串的连接与分割
  • 字符串的比较
  • 使用字符串函数匹配和替换子字符串
  • 使用正则表达式(下一篇文章专门总结)

1、字符串的格式化:chop(rtrim)、ltrim、和trim

用来清理字符串的空格,如果要将字符串存入文件或者数据库,或者与其它字符串进行比较,就需要先清理空格。 例如:$name = trime($_POST[‘name’]); string trim ( string $str [, string ​$charlist​ ] )  //函数trim的原型 trim函数默认是去除空格的,但是第二个参数可以指定一个需要过滤的字符列表,例如: $trimmed = trim($hello, ‘HdWr’);

2、使用HTML格式化:nl2br()函数,以便显示

该函数将字符串中的换行符替换成HTML的<br>,以便在浏览器中显示

3、有三个格式化字符串函数print、printf、sprintf以便显示

int print ( string $arg );//和echo()相同,只不过有返回值(true表示成功)

int printf ( string $format [, mixed $args [, mixed $... ]] );//将格式化的字符串输出到浏览器

string sprintf ( string $format [, mixed $args [, mixed $... ]] );//返回一个格式化了的字符串(内存格式化字符串)

使用printf和sprintf可以完全替代number_format,比如格式字符串中用%.2f,可以格式化2位小数 格式化字符串的格式: %[‘填充字符][-][宽度][.精度]类型 如果想打印%,需要使用“%%”转换;

  • 填充字符:可选,用来填充变量直至所指定的宽度;默认为空格,如果指定了空格或者0就不需要’作为前缀;否则就加上’作为前缀
  • 字符-:可选,指明左对齐,还是默认的右对齐
  • 宽度:指定被替换的变量有多长的空间
  • 精度:必须前面带个小数点,指定小数点后面需要显示的位数

以下是格式化的类型码:

类型

意义

b

解释为整数,并作为二进制输出

c

解释为整数,并作为字符输出

d

解释为整数,并作为小数输出

f

解释为双精度,并作为浮点数输出

o

解释为整数,并作为八进制输出

s

解释为字符串,并作为字符串输出

u

解释为整数,并作为非指定小数输出

x

解释为整数,并作为带有小写字母a~f的十六进制输出

X

解释为整数,并作为带有小写字母A~F的十六进制输出

注意:参数顺序和转换说明顺序不一定相同,比如%2\$.2f,就是用列表的第二个参数来替换该格式码 有更好用的两个函数,它不接受参数列表,而是接受一个数组:

int vprintf ( string ​​$format​​​ , array ​​$args​​ )

string vsprintf ( string ​​$format​​​ , array ​​$args​​ )

比如:


<?php
print vsprintf ( "%04d-%02d-%02d" , explode ( '-' , '1988-8-1' ) ) ; // 1988-08-01
?>


 

4、改变字符串中的字母大小写

  • strtoupper($str):将字符串转换成大写
  • strtolower($str):将字符串转换成小写
  • ucfirst($str):如果字符串第一个字符是字母,将该字符转为大写
  • ucwords($str):将字符串每个单词的第一个字母转换为大写

5、格式化字符串以便存储:addslashes()和stripslashes()

如果将字符串存入数据库,以下几个字符串中的字符会被解释成控制符,从而引发问题:

  • 引号:双引号和单引号
  • 反斜杠(\)
  • NULL字符

解决方法,是在这三类字符前面,加上转义字符\,变成了[\”, \’, \\, \NULL] PHP提供了两个专门用于转义字符串的函数

string addslashes ( string ​​$str​​ )//为特殊字符加上转义字符\ string stripcslashes ( string ​​$str​​ )//与前者想法,它去掉转义字符

比如:

<?php
$str = "Is your name O'reilly?" ;

// Outputs: Is your name O\'reilly?
echo addslashes ( $str ) ;


 

注意:如果服务器开启了magic_quotes_gpc选项,GET、POST和COOKIE数组的变量自动被包括在引号内,显示的时候如果不正常,可以用stripcslashes 去掉引号就可以了。可以用get_magic_quotes_gpc()函数来检查该变量是否被打开。

6、使用函数explode()、implode()和join()

array explode ( string ​​$delimiter​​​ , string ​​$string​​​ [, int ​​$limit​​ ] )

该函数使用定界符分割字符串,返回子字符串的数组,limit限制分成字符串块的数量

<?php
$str = 'one|two|three|four' ;

// positive limit
print_r ( explode ( '|' , $str , 2 ) ) ;

// negative limit (since PHP 5.1)
print_r ( explode ( '|' , $str , - 1 ) ) ;
?>


结果:



Array
(
[ 0 ] = > one
[ 1 ] = > two | three | four
)
Array
(
[ 0 ] = > one
[ 1 ] = > two
[ 2 ] = > three
)



 

而implode和join完成同样的功能,就是提供一个定界符,把数组合并成一个字符串:

string implode ( string ​​$glue​​​ , array ​​$pieces​​ )

例如:

<?php

$array = array ( 'lastname' , 'email' , 'phone' ) ;
$comma_separated = implode ( "," , $array ) ;

echo $comma_separated ; // lastname,email,phone

// Empty string when using an empty array:
var_dump ( implode ( 'hello' , array ( ) ) ) ; // string(0) ""

?>

 

7、strtok()每次根据分隔符取出一个字符串(挨个处理)

string strtok ( string ​​$str​​​ , string ​​$token​​ )

分隔符可以使字符串或者字符,如果是字符串,也当成字符的组合来处理:



<?php
$string = "This is\tan example\nstring" ;
/* Use tab and newline as tokenizing characters as well */
$tok = strtok ( $string , " \n\t" ) ;

while ( $tok !== false ) {
echo "Word=$tok<br />" ;
$tok = strtok ( " \n\t" ) ;
}
?>

 

注意:分割是根据字符来进行,而不是字符串

8、使用substr()函数获得字符串的子字符串

string substr ( string ​​$string​​​ , int ​​$start​​​ [, int ​​$length​​ ] )

  • 如果没有length,start为正则返回从start开始到末尾的字符串,为负则取得字符串末尾的start个字符
  • 如果length为正,则指明个数;如果为负则指明截取的子串到字符串末尾往前数length个字符

有点解释不清楚,下面有例子,一看就明白了:


$ rest = substr ( "abcdef" , - 1 ) ;      // returns "f"
$ rest = substr ( "abcdef" , - 2 ) ; // returns "ef"
$ rest = substr ( "abcdef" , - 3 , 1 ) ; // returns "d"
$ rest = substr ( "abcdef" , 0 , - 1 ) ; // returns "abcde"
$ rest = substr ( "abcdef" , 2 , - 1 ) ; // returns "cde"
$ rest = substr ( "abcdef" , 4 , - 4 ) ; // returns false
$ rest = substr ( "abcdef" , - 3 , - 1 ) ; // returns "de"
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
————————————————


 

9、字符串的比较和长度

  • strcmp,若str1等于str2返回0,若str1>str2返回正数,若str1<str2返回负数,注意,不一定是正负1

int strcmp ( string $str1 , string ​$str2​ )

  • strcasecmp的用法和strcmp一模一样,只不过它不计大小写

int strcasecmp ( string ​​$str1​​​ , string ​​$str2​​ )

  • strnatcmpstrncasecmp 是按照自然排序进行的,比如strcmp中2>12,但是这里2<12

int strnatcmp ( string ​​$str1​​​ , string ​​$str2​​ ) int strncasecmp ( string ​​$str1​​​ , string ​​$str2​​​ , int ​​$len​​ )

  • strlen返回给定字符串的长度

int strlen ( string ​​$string​​ )

10、查找字符串(子串非位置):strstr、strchr、strrchr和stristr

  • strstr()和strchr()在PHP中完全相同,这两个函数区分大小写,可用于字符或者字符串

string strstr ( string ​$haystack​ , mixed$needle​​ [, bool ​​$before_needle​​ = false ] )

第三个参数如果为TRUE,返回找到的串前面的部分;默认返回后面的部分;找不到返回false;

<?php
$email = 'name@example.com' ;
$domain = strstr ( $email , '@' ) ;
echo $domain ; // prints @example.com

$user = strstr ( $email , '@' , true ) ; // As of PHP 5.3.0
echo $user ; // prints name
?>

 

  • stristr和strstr()使用方法一模一样,只是不管大小写
  • strrchr()和strstr()几乎一样,只是会从最后出现目标关键字位置的前面返回被搜索字符串

string strrchr ( string $haystack , mixed $needle )


// get last directory in $PATH $dir = substr(strrchr($PATH, ":"), 1);
1
2
// get last directory in $PATH
$ dir = substr ( strrchr ( $ PATH , ":" ) , 1 ) ;


 

 

11、查找子字符串的位置:strpos()、strrpos()

函数strpos()和strrpos()和strstr()类似,但是返回的不是子字符串,而是返回字符串在目标串的位置。

int strpos ( string $haystack , mixed $needle [, int ​$offset​ = 0 ] )

如果offset为非0,那么就会从offset开始的地方开始搜索子串,注意,因为找不到会返回false,这和PHP的0是相等的,也就是第一个字符,因此比较的时候,要用全比较===:


<?php
$mystring = 'abc' ;
$findme = 'a' ;
$pos = strpos ( $mystring , $findme ) ;

// Note our use of ===. Simply == would not work as expected
// because the position of 'a' was the 0th (first) character.
if ( $pos === false ) {
echo "The string '$findme' was not found in the string '$mystring'" ;
} else if ( $pos !== false ) {
echo "The string '$findme' was found in the string '$mystring'" ;
echo " and exists at position $pos" ;
}
?>

strrpos和strpos()一样,只是返回的是查找串在目标串的最后出现的位置

12、字符串的替换str_replace和substr_replace

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int ​&$count​ ] )

  • 功能:用replace替换subject中所有的search,并返回subject替换后的结果
  • 第四个参数count,表示要执行的替换操作的次数,是回调变量,被传回使用
  • 注意,前三个参数,都可以传入数组。传入搜索的数组,传入替换数组,传入目标字符串数组,返回的是替换后的数组

<?php
// Provides: <body text='black'>
$bodytag = str_replace ( "%body%" , "black" , "<body text='%body%'>" ) ;

// Provides: Hll Wrld f PHP
$vowels = array ( "a" , "e" , "i" , "o" , "u" , "A" , "E" , "I" , "O" , "U" ) ;
$onlyconsonants = str_replace ( $vowels , "" , "Hello World of PHP" ) ;

// Provides: You should eat pizza, beer, and ice cream every day
$phrase = "You should eat fruits, vegetables, and fiber every day." ;
$healthy = array ( "fruits" , "vegetables" , "fiber" ) ;
$yummy = array ( "pizza" , "beer" , "ice cream" ) ;

$newphrase = str_replace ( $healthy , $yummy , $phrase ) ;

// Provides: 2
$str = str_replace ( "ll" , "" , "good golly miss molly!" , $count ) ;
echo $count ;
?>

mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )

  • 该函数,将从start开始的length个字符,替换成​​replacement​

<?php
$var = 'ABCDEFGH:/MNRPQR/' ;
echo "Original: $var<hr />\n" ;

/* 下面两个替换,将整个串替换成bob */
echo substr_replace ( $var , 'bob' , 0 ) . "<br />\n" ;
echo substr_replace ( $var , 'bob' , 0 , strlen ( $var ) ) . "<br />\n" ;

/* 下面的例子相当于插入了bob在字符串的开始 */
echo substr_replace ( $var , 'bob' , 0 , 0 ) . "<br />\n" ;

/* 以下两个替换了'MNRPQR'成bob */
echo substr_replace ( $var , 'bob' , 10 , - 1 ) . "<br />\n" ;
echo substr_replace ( $var , 'bob' , - 7 , - 1 ) . "<br />\n" ;

/* 相当于删除了'MNRPQR' */
echo substr_replace ( $var , '' , 10 , - 1 ) . "<br />\n" ;
?>