一、字符串操作
1.字符串的格式化
1.1 干掉空格
trim()函数可以除去字符串开始位置和结束位置的空格,并将结果字符串返回。
ltrim()函数可以除去字符串开始位置的空格。
rtrim()函数可以除去字符串结束位置的空格。
1.2 格式化字符串以便显示
nl2br()函数将字符串作为输入参数,用HTML中的<br />标记代替字符串中的换行符。
printf()函数将一个格式化的字符串输出到浏览器中。
sprintf()函数返回一个格式化了的字符串。
当在类型转换代码中使用printf()函数时,可以使用带序号的参数方式,就是说,参数的顺序不一定要与转换说明中的顺序相同。
printf(“Total aount of order is %2\$.2f(with shipping %1\.2f)”,
$total_shipping,$total);
strtoupper()函数将字符串转换为大写。
strtolower()函数将字符串转换为小写。
ucfirst()函数将第一个字符转换为大写(如果是字母的话)。
ucwords()函数将字符串每个单词的第一个字母转换为大写。
1.3 格式化字符串以便存储
当将数据插入到数据库中的时候可能会引起一些问题,因为数据库会将这些字符解释成控制符。这些有问题的字符就是引号(单引号,双引号)、反斜杠和NULL字符。为了将这些字符进行转义处理,可以在它们前面加一个反斜杠。PHP提供了两个专门用于转义字符串的函数。
PHP配置将自动添加或去除反斜杠。这个功能是由magic_quotes_gpc配置指令控制的。新版本默认启用。
如果启用,必须调用stripslashes()函数移除这些反斜杠;否则应该使用addslashes()将它们重新格式化,所有引号将被加上反斜杠。
2.用字符串函数连接和分割字符串
2.1 分割与组合
explode()函数把字符串分割为数组。
explode(separator,string,limit)
separator:根据什么分割
string:要分割的字符串
limit:返回数组元素的最大数目(可选)
如果域名是大写的或者大小写混合的,这个函数就无法正常使用。可以通过将域名转换成全是大写或小写的方法来避免这个问题。
implode()函数把数组元素组合为一个字符串。join()函数是它的别名。
separator:数组元素之间放置的内容
array:要结合为字符串的数组
2.2 继续分割
strtok()函数把字符串分割成更小的字符串。
string:规定要分割的字符串
split:规定一个或多个分割字符
2.3 截取
substr()函数返回字符串的一部分。
substr(string,start,length)
string:必需。规定要返回其中一部分的字符串。
start:必需。规定在字符串的何处开始。
正数 - 在字符串的指定位置开始
负数 - 在从字符串结尾的指定位置开始
0 - 在字符串中的第一个字符处开始
length:可选。规定要返回的字符串长度。默认是直到字符串的结尾。
正数 - 从 start 参数所在的位置返回
负数 - 从字符串末端返回
3.字符串的比较
strcmp()的函数原型如下所示:
int strcmp(string str1, string str2);
如果这两个字符串相等,该函数就返回0,如果按字典顺序str1在str2后面(大于str2)就返回一个正数,如果str1小于str2就返回一个负数。这个函数是区分大小的。
strcasecmp()除了不区分大小写之外,其他和strcmp()一样。
strnatcmp()及与之对应的不区分大小写的strnatcasecmp()将按“自然排序”比较字符串。
strlen()函数可以检查字符串的长度。
4.使用字符串函数匹配和替换子字符串
4.1 在字符串中找字符串
函数strstr()可以用于在一个较长的字符串中查找匹配的字符串或字符。
string strstr(源字符串,目标子字符串);
如果找到了目标关键字的一个精确匹配,函数将会从目标关键字前面返回被搜索的字符串,否则返回值为false。如果存在不止一个目标关键字,返回的字符串从出现第一个目标关键字的位置开始。
函数strstr()有两个变体。一个是stristr(),不区分大小写。另一个是strrchr(),会从最后出现目标关键字的位置的前面返回被搜索字符串。
4.2 查找子字符串的位置
函数strpos()返回目标关键字子字符串在被搜索字符串中的位置。相比strstr()函数运行速度更快。
int strpos(string haystack, string needle, int [ offset]);
该函数的可选参数offset是用来指定被搜索字符串的开始搜索位置。
函数strrpos()也几乎是一样的,但返回的是被搜索字符串中最后一次出现目标关键字子字符串的位置。
在任何情况下,如果目标关键字不在字符串中,strpos()或strrpos()都将返回false。因此,这就可能带来新的问题,因为false在一个如PHP这样的弱类型语言中等于0,也就是说字符串的第一个字符。
可以使用运算符“===”来测试返回值,从而避免这个问题:
$result = strpos($test, "H");
if($result === false){
echo "Not found";
}
else{
echo "Found at position ".$result;
}
4.3 替换子字符串
str_replace():
mixed str_replace(mixed needle, mixed new_needle, mixed haystack[, int & count]);
四个参数依次对应:原子字符串、新子字符串、源字符串,要执行的替换操作次数(可选)。
函数substr_replace()则用来在给定位置中查找和替换字符串中特定的子字符串。
string substr_replace(string string, string replacement, int start, int [length]);
这个函数使用字符串replacement替换字符串string中的一部分。
二、正则表达式
5.正则表达式的介绍
5.1 科普
正则表达式是一种描述一段文本模式的方法。
正则是在一个字符串的某个位置匹配另一个字符串。除了精确匹配字符外,还可以用特殊字符来指定表达式的元意。
下面我们来介绍POSIX风格的正则。
5.2 字符集和类
字符集可以用于匹配属于特性类型的任何字符;事实上它们是一种通配符。
可以用字符作为一个通配符来代替除换行符(\n)之外的任一个字符:
如果要限定它是a到z之间的字符:
任何包含在方括号([])中的内容都是一个字符类(一个呗匹配字符所