6.3 字符串操作
字符串操作主要包括对字符串的格式化处理、连接切分字符串、比较字符串、字符串子串的对比与处理等。
6.3.1 手动和自动转义字符串中的字符
手动转义字符串数据,就是在引号内(包括单引号和双引号)通过使用“\”反斜杠使一些特殊字符转义为普通字符。这个方法在介绍单引号和双引号的时候已经作了详细的描述。
自动转义字符串的字符,是通过PHP的内置函数addslashes()来完成的。还原这个操作则是通过stripslashes()来完成的。以上两个函数,也经常使用在格式化字符串以用于MySQL的数据库存储。
6.3.2 计算字符串的长度
计算字符串的长度经常在很多应用中出现。例如输入框输入文字的多少等,都会用到此功能。这个功能使用strlen()函数就可以实现。通过以下实例介绍计算字符串长度的方法和技巧。
【例6.4】(实例文件:ch06\6.4.php)
<HTML> <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></HEAD> <BODY> <?php $someinput = "这个字符串的长度不长。length is not long."; $length = strlen($someinput); if(strlen($someinput)>50){ echo "输入的字符串的长度不能大于50个字符。"; }else{ echo "允许输入字符串的长度,此字符串长度为$length"; } ?> </BODY> </HTML>
运行结果如图6-4所示。
【案例分析】
(1)其中$someinput为一个字符串变量。strlen($someinput)则是直接调用strlen()函数计算出字符串的长度。
(2)在if语句中strlen($someinput)返回字符串长度并与50这一上限作比较。由于,$someinput中有中文和英文两种字符,它的长度为41,正如输出所示。
(3)由于每个中文字占两个字符位,每个英文字符占一个字符位,字符串内的每个空格也算一个字符位,所以,最后字符串的长度为41个字符。
6.3.3 字符串单词统计
有的时候对字符串的单词进行统计有更大意义。使用str_word_count()函数可以实现此操作,但是这个函数只对基于ASCII码的英文单词起作用,并不对utf8的中文字符起作用。
下面通过实例介绍字符串单词统计中的应用和技巧。
【例6.5】(实例文件:ch06\6.5.php)
<HTML> <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></HEAD> <BODY> <?php $someinput = "How mang words in this sentance? Just count it."; $someinput2 = "这个句子有多少个汉字组成?数一数也不知道。"; echo str_word_count($someinput)."<br />"; echo str_word_count($someinput2); ?> </BODY> </HTML>
运行结果如图6-5所示。可见str_word_count()函数无法计算中文字符,查询结果为0。
6.3.4 清理字符串中的空格
空格在很多情况下是不必要的,所以清除字符串中的空格显得十分重要。例如,在判定输入是否正确的程序中,出现了不必要的空格,将增大程序出现错误判断的概率。
清除空格要使用到ltrim()、rtrim()和trim()函数。
其中ltrim()是从左边清除字符串头部的空格。rtrim()是从右边清除字符串尾部的空格。trim()则是从字符串两边同时去除头部和尾部的空格。
通过以下实例介绍去除字符串中空格的方法和技巧。
【例6.6】(实例文件:ch06\6.6.php)
<HTML> <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></HEAD> <BODY> <?php $someinput = " 这个字符串的空格有待处理。 "; echo "Output:".ltrim($someinput)."End <br />"; echo "Output:".rtrim($someinput)."End <br />"; echo "Output:".trim($someinput)."End <br />"; $someinput2 = " 这个字符串 的 空格有待处理。 "; echo "Output:".trim($someinput2)."End"; ?> </BODY> </HTML>
运行结果如图6-6所示。
【案例分析】
(1)$someinput为一个两端都有空格的字符串变量。ltrim($someinput)从左边去除空格,rtrim($someinput)从右边去除空格,trim($someinput)从两边同时去除。
(2)$someinput2为一个两端都有空格并且中间也有空格的字符串变量。用trim($someinput2)处理,只去除了两边的空格。
6.3.5 字符串切分与组合
字符串的切分使用explode()和strtok()函数。切分的反向操作为组合,使用implode()和join()函数。
其中explode()把字符串切分成不同部分后,存入一个数组。implode()函数则是把数组中的元素按照一定的间隔标准组合成一个字符串。
以下实例介绍去除字符串切分和组合的方法和技巧。
【例6.7】(实例文件:ch06\6.7.php)
<HTML> <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></HEAD> <BODY> <?php $someinput = "How_to_split_this_sentance."; $someinput2 = "把 这个句子 按空格 拆分。"; $a = explode('_',$someinput); print_r($a); $b = explode(' ',$someinput2); print_r($b); echo implode('>',$a)."<br />"; echo implode('*',$b); ?> </BODY> </HTML>
运行结果如图6-7所示。
【案例分析】
(1)explode()函数按照下划线和空格的位置把$someinput和$someinput2分别切分成$a和$b两个数组。
(2)implode()函数把$a和$b两个数组的元素分别按照“>”为间隔和“*”为间隔组合成新的字符串。
6.3.6 字符串子串截取
在一串字符串中截取一个子串,就是字符串截取。
完成这个操作需要使用到substr()函数。这个函数有三个参数,分别规定了目标字符串、起始位置和截取长度。它的格式如下:
substr(目标字符串,起始位置,截取长度)
其中目标字符串是某个字符串变量的变量名,起始位置和截取长度都是整数。
如果都是正数,起始位置的整数必须小于街区长度的整数,否则函数返回值为假。
如果截取长度为负数,则意味着,是从起始位置开始往后,除去从目标字符串结尾算起的长度数的字符以外的所有字符。
以下实例介绍去除字符串截取的方法和技巧。
【例6.8】(实例文件:ch06\6.8.php)
<HTML> <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></HEAD> <BODY> <?php $someinput = "create a substring of this string."; $someinput2 = "创建一个这个字符串的子串。"; echo substr($someinput,0,11)."<br />"; echo substr($someinput,1,15)."<br />"; echo substr($someinput,0,-2)."<br />"; echo substr($someinput2,0,12)."<br />"; echo substr($someinput2,0,10)."<br />"; echo substr($someinput2,0,11); ?> </BODY> </HTML>
运行结果如图6-8所示。
【案例分析】
(1)$someinput为英文字符串变量。substr($someinput,0,11)和substr($someinput,1,15)展示了起始位和截取长度。substr($someinput,0,-2)则是从字符串开头算起,除了最后两个字符,其他字符都截取的子字符串。
(2)$someinput2为中文字符串变量。因为中文字符都是全角字符,都占两个字符位。所以截取长度一定要是偶数。如果是单数则在此字符位上的汉字将不被输出。如果在这样截取长度为单数的字符串子串后连接其他字符串输出,会出现输出错误。所以,要小心使用。
6.3.7 字符串子串替换
在某个字符串中替换其中的某个部分是重要的应用,就像在使用文本编辑器中的替换功能一样。
完成这个操作需要使用substr_replace()函数。它的格式为:
substr_replace(目标字符串,替换字符串,起始位置,替换长度)
以下实例介绍字符串替换的方法和技巧。
【例6.9】(实例文件:ch06\6.9.php)
<HTML> <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></HEAD> <BODY> <?php $someinput = "ID:125846843388648"; echo substr_replace($someinput,"************",3,11)."<br />"; echo substr_replace($someinput,"尾号为",3,11); ?> </BODY> </HTML>
运行结果如图6-9所示。
【案例分析】
(1)$someinput为英文字符串变量。从第三个字符开始为ID号。第一个输出是以“************”替换第三个字符开始往后的11个字符。
(2)第二个输出是用"尾号为"替代第三个字符开始往后的11个字符。
6.3.8 字符串查找
在一个字符串中查找另外一个字符串,就像文本编辑器中的查找一样。实现这个操作需要使用到strstr()或stristr()函数。strstr()的格式为:
strstr(目标字符串,需查找字符串)
当函数找到需要查找的字符或字符串,则返回从第一个查找到字符串的位置往后所有的字符串内容。
stristr()函数为不敏感查找,也就是对字符的大小写不敏感。用法与strstr()相同。
以下实例介绍字符串查找的方法和技巧。
【例6.10】(实例文件:ch06\6.1.php)
<HTML> <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></HEAD> <BODY> <?php $someinput = "I have a Dream that to find a string with a dream."; $someinput2 = "我有一个梦想,能够找到理想。"; echo strstr($someinput,"dream")."<br />"; echo stristr($someinput,"dream")."<br />"; echo strstr($someinput,"that")."<br />"; echo strstr($someinput2,"梦想")."<br />"; ?> </BODY> </HTML>
运行结果如图6-10所示。
【案例分析】
(1)$someinput为英文字符串变量。strstr($someinput,"dream")敏感大小写,所以输出字符串的最后的字符。stristr($someinput,"dream")为不敏感大小写,所以直接在第一个大写的匹配字符就开始输出。
(2)$someinput2为中文字符串变量。strstr()函数同样对中文字符起作用。