文章教程

6.8其他常见的字符串操作

9/17/2020 9:31:19 PM 人评论 次浏览

6.8 其他常见的字符串操作

除了前文介绍的这些字符串操作外,PHP还提供了一些对字符串进行处理的函数,如大小写转换、字符数组的转换等,本节就讲解这些特殊处理的相关知识。

6.8.1 对字符串做大小写转换

PHP提供了两个函数分别完成对字符串中字母的大小写转换,如下。

·strtoupper($str),将字符串$str中的字母全部转换为大写字母。

·strtolower($str),将字符串$str中的字母全部转换为小写字母。

代码6-15演示了这两个函数的用法。

代码6-15 对字符串中的字母做大小写转换6-16.php


     01 <?php
     02 $str = "I love PHP!";
     03 
     04 $str_to_lower = strtolower($str);               //
转换字符串为小写
     05 $str_to_upper = strtoupper($str);               //
转换字符串为大写
     06 
     07 echo "
原始字符串:$str";
     08 echo "<br/>";
     09 echo "<br/>";
     10 
     11 echo "
全部转换成小写:$str_to_lower";
     12 echo "<br/>";
     13 echo "<br/>";
     14 
     15 echo "
全部转换成大写:$str_to_upper";
     16 ?>

【代码解析】学习过一门语言的读者可能都知道,带upper的一般都表示大写,带lower的一般表示小写,不管是C语言,还是C#、Java语言,都有这方面的大小写转换函数。这段代码的执行结果如图6-15所示。

6.8.2 处理含有HTML标记的字符串

使用PHP进行Web页面开发,经常会遇到处理HTML标记的问题。PHP提供的函数htmlentities()可以完成对字符串中HTML标记的处理,该函数可将字符串中有关字符转换成HTML实体,即HTML字符编码。该函数的语法如下。


string htmlentities(string $str);

函数htmlentities()将字符串$str中的HTML标记(如<、>等)转换成相关编码的形式。代码6-16演示了该函数的用法。

代码6-16 使用函数htmlentities()处理字符串中的HTML标记6-16.php


     01 <?php
     02 $str = "<b>I love PHP!</b>";
     03 $str_entity = htmlentities($str);       //
处理字符串中的HTML
标记
     04 
     05 echo "
转换前:$str";
     06 echo "<br/>";
     07 echo "<br/>";
     08 
     09 echo "
转换后:$str_entity";
     10 ?>

【代码解析】如果读者还不知道HTML标签的意义,请返回第1章查看。<b>表示将字符串加粗显示。如果不转化成HTML编码形式,那字符串会原样输出文字。这段程序的执行结果如图6-16所示。

图6-15 对字符串中的字母做大小写转换

图6-16 处理字符串中的HTML标记

从执行结果可以看出,转换前,浏览器将字符串“<b>I love PHP!</b>”做解析,然后将其以粗体文字的形式显示到浏览器上;而转换后,HTML标记被原模原样地显示到浏览器上。事实上,转换后,字符串变成了“&lt;b&gt;I love PHP!&lt;/b&gt;”,这时浏览器将其解析为<b>I love PHP</b>,并且输出到浏览器端。通过查看该页面的源代码可以更清楚地了解这一点。程序6-16.php执行后页面源代码如下,其中字符<转换成HTML实体&lt;,字符>转换成HTML实体&gt;。HTML实体通常以&开头,以;结束。


转换前:<b>I love PHP!</b><br/>
转换后:&lt;b&gt;I love PHP!&lt;/b&gt;

还有一个和htmlentities()功能类似的函数,即htmlspecialchars(),该函数可以将特殊符号转换成HTML实体。它主要转换的特殊符号有如下几个。

·&:转换成&。

·“(双引号):转换成"。

·<(小于号):转换成<

·>(大于号):转换成>

函数htmlspecialchars()的用法和函数htmlentities()类似,这里不再赘述。

PHP还提供了将HTML实体转换成相关字符的函数html_entity_decode()。该函数的语法如下。


string html_entity_decode(string $str);

该函数将字符串$str中的HTML实体转换成相关的字符,它可以看做是函数htmlentities()的逆运算。代码6-17演示了该函数的用法。

代码6-17 使用函数html_entity_decode()将HTML实体转换成相关字符6-17.php


     01 <?php
     02 $str = "<a href='http://www.php.net'>PHP language website</a>";
     03 
     04 $str_entity = htmlspecialchars($str);
     05 $str_html = html_entity_decode($str_entity);            //
将HTML
实体转换成字符
     06 
     07 echo "
调用函数htmlspecialchars
后:";
     08 echo "<br/>";
     09 echo $str_entity;
     10 
     11 echo "<br/>";
     12 echo "<br/>";
     13 
     14 echo "
调用函数html_entity_decode
后:";
     15 echo "<br/>";
     16 echo $str_html;
     17 ?>

【代码解析】代码第02行定义的变量中包含了<a>标签,这是一个链接标签。第04行先去掉变量中的特殊字符,然后第05行使用html_entity_decode()转换HTML实体。这段代码的执行结果如图6-17所示。

6.8.3 多次生成一个字符串

函数str_repeat()可以用来重复生成一个字符串,该函数的语法如下。


string str_repeat (string $input, int $num)

函数str_repeat()有两个参数,第1个参数$input是要重复生成的字符串;第2个参数$num是要重复的次数。参数$num的取值必须大于等于0,如果$num设置为0,该函数会返回一个空字符串。代码6-18演示了该函数的用法。

代码6-18 用函数str_repeat()重复生成字符串6-18.php


     01 <?php
     02 $str = 'jingle bells
~, ';
     03 
     04 echo '
重复输出两次:';
     05 echo '<br/>';
     06 echo str_repeat($str,2);                //
重复生成字符串两次
     07 
     08 echo '<br/>';
     09 echo '<br/>';
     10 echo '
当函数str_repeat()
第2
个参数为0
时:';
     11 echo '<br/>';
     12 echo 's='.str_repeat($str,0);
     13 ?>

【代码解析】这段代码的执行结果如图6-18所示。从中可以看出,当函数str_repeat()第2个参数设定为0时,函数str_repeat()生成一个空字符串。

图6-17 使用html_entity_decode()转换HTML实体

图6-18 重复生成字符串

还有一个函数str_pad()和str_repeat()类似,该函数用一个字符串补全另一个字符串的一定长度,也就是相当于一个字符串可能会多次生成。函数str_pad()的语法如下。


string str_pad (string $input, int $pad_length [, string $pad_string [, int $pad_type]])

该函数将参数字符串$input补全到长度为$pad_length时返回,可以在字符串$input的左边、右边或者左右两边进行补全。可选参数$pad_string用来补全的字符串,如果没有指定该参数,将默认使用空格进行补全。可选参数$pad_type用来指定补全方式,该参数的取值为STR_PAD_RIGHT(在右边进行补全)、STR_PAD_LEFT(在左边进行补全)、STR_PAD_BOTH(同时在两边进行补全),如果没有指定该参数,将在原字符串右边进行补全。代码6-19演示了该函数的用法。

代码6-19 重复字符串来补全另一个字符串6-19.php


     01 <?php
     02 $input = "Story";
     03 
     04 echo '/'.str_pad($input, 10).'/';                       //
输出字符串
     05 echo '<br/>';
     06 echo '<br/>';
     07 
     08 echo str_pad($input, 10, "-*", STR_PAD_LEFT);           //
用-*
左端补齐字符串
     09 echo '<br/>';
     10 echo '<br/>';
     11 
     12 echo str_pad($input, 10, "*", STR_PAD_BOTH);            //
用*
两端补齐字符串
     13 echo '<br/>';
     14 echo '<br/>';
     15 
     16 echo str_pad($input, 6 , "***");                        //
在右边补齐***
     17 ?>

【代码解析】代码第04行没有指定要补全的字符串,所以默认为用空格补全。第08、第12行都指定了用来补全的字符串,同时还指定了补全方式。代码6-19的执行结果如图6-19所示。

6.8.4 将字符串分析到变量

本小节所说的分析字符串是指分析URL中的查询字符串。例如一个URL是http://www.somesite.com/index.php?i=000&key=1a2b3c&cnt=10,那么该URL的查询字符串就是i=000&key=1a2b3c&cnt=10。PHP提供了函数parse_str()用于分析类似的字符,并将分析结果赋值给变量。函数parse_str()的语法如下。


void parse_str(string $str [, array $arr])

本函数可将URL的查询字符串参数$str解析,返回的变量名及值与查询字符串中的名称及值相对应。该函数第2个参数是一个指定的数组,是可选的,如果指定这个数组参数,那么函数parse_str()将分析字符串得到变量作为数组索引、值作为数组元素存入该数组。代码6-20很清楚地演示了该函数的用法。

代码6-20 分析字符串到变量6-20.php


     01 <?php
     02 $str = "first=php&second[]=string+functions&second[]=useing";
     03 echo '
原字符串:';
     04 echo '<br/>';
     05 echo $str;
     06 
     07 parse_str($str);                                //
分析字符串
     08 echo '<br/>';
     09 echo '<br/>';
     10 
     11 echo '
分析结果:';
     12 echo '<br/>';
     13 echo 'first = '.$first;
     14 echo '<br/>';
     15 echo 'second[0] = '.$second[0];
     16 echo '<br/>';
     17 echo 'second[1] = '.$second[1];
     18 
     19 parse_str($str,$input);                         //
将分析结果保存到数组
     20 echo '<br/>';
     21 echo '<br/>';
     22 
     23 echo '
指定输出数组参数的结果:';
     24 echo '<br/>';
     25 echo "input['first'] = ".$input['first'];
     26 echo '<br/>';
     27 echo "input['second'][0] = ".$input['second'][0];
     28 echo '<br/>';
     29 echo "input['second'][1] = ".$input['second'][1];
     30 echo '<br/>';
     31 ?>

【代码解析】代码第07行和第19行都使用了函数parse_str(),其中第07行没有带第2个参数,第19行就带来第2个参数,所以这里$input其实是一个数组,可以使用第27、29行代码实现数组元素的输出。代码6-20的执行结果如图6-20所示。

图6-19 使用字符串对另一字符串进行补全

图6-20 分析字符串到变量

6.8.5 转换字符串到数组

PHP提供的函数str_split()可将字符串转换成一个数组,即将数组分割成几个部分,每个部分的值作为数组的元素。该函数的语法如下。


array str_split(string $str [, int $split_length])

该函数将字符串$str做分割,将分割后的字符串各部分存入数组,并将数组返回。可选参数$split_length用来指定分割字符串长度。如果没有指定该参数,函数将把字符串$str按一个字符的长度分割。代码6-21演示了该函数的用法。

代码6-21 转换字符串到数组6-21.php


     01 <?php
     02 $str = 'How are you?';
     03 echo '
原字符串:';
     04 echo '<br/>';
     05 
     06 echo $str;
     07 echo '<br/>';
     08 echo '<br/>';
     09 
     10 $arr1 = str_split($str);                //
将转换结果保存到数组
     11 $arr2 = str_split($str, 3);             //
指定数组的3
个元素
     12 
     13 echo '<pre>';
     14 print_r($arr1);
     15 print_r($arr2);
     16 echo '</pre>';
     17 ?>

【代码解析】代码6-21的执行结果如图6-21所示。从结果可以看出,字符串中的空白字符也会被存入数组。当函数str_split()指定第2个参数时,字符串将按第2个参数所指定长度的字符串来截取原字符串。

图6-21 将字符串转换到数组

6.8.6 计算字符串的散列

散列主要用于信息安全领域的加密算法,它把任意长度的输入(又叫做预映射)转化成杂乱的128位的编码,这个编码叫做散列值。也可以说,散列就是找到一种数据内容和数据存放地址之间的映射关系。常见的散列算法有MD5、SHA1等。

PHP中提供了对应的函数用于完成对字符串做MD5散列计算,也提供了函数完成SHA1散列计算,这两个函数分别是md5()和sha1()。函数md5()的语法如下。


string md5(string $str )

该函数用来计算参数字符串$str的MD5散列。函数sha1()的语法如下。


string sha1(string $str )

该函数用来计算参数字符串$str的SHA1散列。代码6-22是这两个函数的使用示例程序。

代码6-22 使用函数md5()和sha1()计算字符串的散列值6-22.php


     01 <?php
     02 $str1 = 'This is a secret';
     03 $str2 = 'root';
     04 
     05 echo '
原字符串:';
     06 echo '<br/>';
     07 echo 'str1='.$str1;
     08 echo 'str2='.$str2;
     09 echo '<br/>';
     10 echo '<br/>';
     11 
     12 echo '
使用md5
加密:';
     13 echo '<br/>';
     14 echo "md5($str1)=".md5($str1);                  //
输出MD5
值
     15 echo '<br/>';
     16 echo "md5($str2)=".md5($str2);                  //
输出MD5
值
     17 
     18 echo '<br/>';
     19 echo '<br/>';
     20 
     21 echo '
使用sha1
加密:';
     22 echo '<br/>';
     23 echo "sha1($str1)=".sha1($str1);                //
输出SHA1
值
     24 echo '<br/>';
     25 echo "sha1($str2)=".sha1($str2);                //
输出SHA1
值
     26 ?>

【代码解析】代码6-22的执行结果如图6-22所示。从中看出,无论原字符串的长度是多少,经过函数md5()和sha1()的计算,最终分别会得到长度一样的散列数值。

图6-22 使用md5()和sha1()计算字符串散列

教程类别