1. 格式化字符串


1.1 字符串整理

PHP提供了如下3个函数用以清理字符串中多余的空格:

$string1 = trim($string1);
$string2 = ltrim($string2);
$string3 = rtrim($string3);

trim()函数可以去除字符串开始位置和结束位置的空格,并将结果返回。默认情况下,除去的字符是换行符和回车符、水平和垂直制表符、字符串结束符和空格。除此之外,也可以在函数的第二个参数中提供要过滤的特殊字符。

根据需要,可能会使用ltrim()或rtrim()函数,这三个函数不同之处是,trim()函数将除去整个字符串前后的空格,而ltrim()只从字符串开始处去除,rtrim()只从字符串结束处去除。


1.2 HTML格式化

nl2br()函数将字符串作为输入参数,用XHTML中的
标记代替字符串中的换行符,例如:

echonl2br($content);


1.3 打印输出格式化

printf()和sprintf()函数都会打印一个字符串,只是printf()函数是将一个格式化的字符串输出到浏览器中,而sprintf()函数是返回一个格式化了的字符串。它们的原型如下:

void printf(string format[, mixed args...])
string sprintf(string format[, mixed args...])

格式化字符串中的%是格式转换说明,可以在式化字符串中使用多个转换说明。如果有n个转换说明 ,在格式化字符串后面就应该带有n个参数,例如:

printf("Total amount is %.2f (with shipping %2.f)", $total, $total_shipping);

每个转换说明都遵循同样的格式,如下所示:

%['padding_character'][-][width][.precision]type

参数padding_character是可选的,它将被用来填充变量直至所指定的宽度,默认的填充字符是一个空格,如果指定空格或0,就不需要用" ' "作为前缀,对于其他字符,必须指定" ' "作为前缀。

字符" - "是可选的,它指明该域中的数据应该左对齐,默认是右对齐。

参数width指明函数在这里为被替换的变量留下多少字符空间。

参数precision表示必须是以一个小数点开始,指明了小数点后面要显示的位数。

转换说明类型码
类型
意义
b 解释为整数并作为二进制输出。
c 解释为整数并作为字符输出。
d 解释为整数并作为小数输出。
f 解释为双精度作为浮点数输出。
o 解释为整数并作为八进制数输出。
s 解释为字符串并作为字符串输出。
u 解释为整数并作为非指定小数输出。
x 解释为整数并作为带有小写字母的十六进制输出。
X 解释为整数并作为带有大写字母的十六进制输出。


1.4 改变大小写

可以重新格式化字符串中的大小写。

大小写函数
函数
描述 示例
strtoupper() 转换为大写。 strtoupper($string)
strtolower() 转换为小写。 strtolower($string)
ucfirst() 首字母大写。 ucfirst($string)
ucwords() 每个单词首字母大写。 ucwords($string)


1.5 转义字符串

部分字符插入到数据库时可以能会引起问题,比如单引号" ' "、双引号" " "、反斜杠"\"和NULL字符。为了将这些字符进行转义处理,可以在它们前面加一个反斜杠。

PHP提供了两个用于转义字符串的函数。在字符串写入到数据库之前,可以使用addslashes()将它们重新格式化,例如:

$string = addslashes($string);

在显示用户数据之前,必须调用stripslashes()函数去掉反斜杠,例如:

$string = stripslashes($string);


2. 连接和分割字符串


2.1 指定字符分割

explode()函数可以将字符串分割成几个部分,函数原型如下:

array explode(string separator, string input[, int limit])

这个函数带有一个输入字符串作为参数,并根据一个指定的分隔符字符串将字符串本身分割成小块,返回到数组中。可以通过limit参数来限制分成字符串小块的数量。

使用implode()或join()函数来实现与函数explode()相反的效果,将第一个传入的参数字符将数组中的元素连接在一起,例如:

$string = implode(',', $array);


2.2 令牌分割

strtok()函数一次只从字符串中取出一些片段(令牌),原型如下:

string strtok(string input, string separator)

分隔符可以是一个字符,也可以是一个字符串,输入的字符串会根据分隔符字符串中的每个字符来进行处理,而不是根据整个分隔字符串来分割。


2.3 指定位置分割

函数substr()允许访问一个字符串给定起点和终点的子字符串,函数原型如下:

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

如果只有一个正数作为子字符串起点来调用,将得到从起点到字符串结束的整个字符串,例如:

$string = substr($string, 1);

如果只用一个负数作为子字符串起点来调用,将得到一个原字符串尾部的一个子字符串,字符个数等于给定负数的绝对值,例如:

$string = substr($string, -9);

length参数可以用于指定返回字符的个数(正数),或是字符串序列的尾部(负数),例如:

$string = substr($string, 1, -10);


3. 字符串比较和替换


3.1 比较字符串

strcmp()、strcasecmp()和strnatcmp()函数可用于字符串的比较,当进行数据排序时,这些函数是非常有用的。

strcmp()函数的原型如下:

int strcmp(string str1, string str2)

该函数需要两个进行比较的参数字符串,如果两个字符串相等,函数返回0,如果按字典顺序str1大于str2就返回一个正数,如果str1小于str2就返回一个负数。

函数strcasecmp()除了不区分大小写,其他与strcmp()一样。

函数strnatcmp()及与对应的不区分大小写的strnatcasecmp()将按自然排序比较字符串,例如,按字典顺序"2"大于"12",但是strnatcmp()中"12"大于"2"。


3.2 测试字符串长度

可以使用strlen()函数来检查字符串的长度,例如:

echo strlen("Hello World!");


3.3 在字符串中查找字符串

为了在一个字符串中查找另一个字符串,可以使用函数strstr()、strchr()、strrchr()和stristr()。

函数strstr()用于在一个较长的字符串中查找匹配的字符串或字符,函数strchr()和strstr()完全一样。函数原型如下:

string strstr(string haystack, string needle)

必须向函数传递一个要被搜索的子字符串参数和一个目标关键字字符串参数。如果找到了目标关键字的一个精确匹配,函数会从目标关键字前面返回被搜索的字符串,否则返回false。

函数strstr()有两个变体,不区分大小写的stristr()和从最后出现目标关键字前面返回的strrchr()。


3.4 查找子符串的位置

函数strpos()和strrpos()的操作和strstr()类似,但它是返回目标关键字在被搜索字符串中的位置。函数原型如下:

int strpos(string haystack, string needle[, int offset])

通常,第一个字符是位置0。可选参数offset是用来指定被搜索字符串的开始搜索位置。如果目标关键字不在字符串中,函数将返回false。


3.5 替换子字符串

进行替换操作最常用的函数是str_replace(),函数原型如下:

mixed str_replace(mixed needle, mixed new_needle, mixed haystack[, int &count])

这个函数用new_needle替换所有haystack中的needle,并且返回替换后的结果,第四个可选参数是count,包含了要执行的替换操作次数,例如:

$string = str_replace('1', 'one', $string);

可以以数组的方式传递所有参数,可以传递一个要被替换单词的数组,一个替换单词的数组,以及应用这些规则的目标字符串数组。

函数substr_replace()用来在给定位置中查找和替换字符串中特定的子字符串,函数原型如下:

string substr_replace(string string, string replacement, int start[, int length]);

这个函数使用字符串replacement替换字符串string中的一部分,具体是哪一部分取决于起始位置值和可选参数length的值,例如:

$string = substr_replace($string, 'one', 1, 5);