380 likes | 506 Views
第 7 章 字符串. 字符串在 PHP 中的应用很广泛,在数据存储、传输、文件读写等很多方面,都能使用到字符串函数。与字符串有关的函数很多,本章主要介绍与字符串相关的函数的使用。. 7.1 字符串显示函数. 在本书 2.1 节中,就对字符串显示函数进行了介绍。虽然显示字符串函数很简单,但是其在程序运行过程中,要注意的问题很多。本节将重新回顾这些函数,并介绍更多的显示函数,也将介绍如何将字符串输出到缓冲区。. 7.1.1 输出字符串到屏幕. echo() 与 print() 函数已经介绍过其使用方法。下面通过代码,来介绍其他显示字符串的函数,代码如清单所示。.
E N D
第7章 字符串 • 字符串在PHP中的应用很广泛,在数据存储、传输、文件读写等很多方面,都能使用到字符串函数。与字符串有关的函数很多,本章主要介绍与字符串相关的函数的使用。
7.1 字符串显示函数 • 在本书2.1节中,就对字符串显示函数进行了介绍。虽然显示字符串函数很简单,但是其在程序运行过程中,要注意的问题很多。本节将重新回顾这些函数,并介绍更多的显示函数,也将介绍如何将字符串输出到缓冲区。
7.1.1 输出字符串到屏幕 • echo()与print()函数已经介绍过其使用方法。下面通过代码,来介绍其他显示字符串的函数,代码如清单所示。
7.1.2 字符串与文件 • 使用fprintf()函数,可以把给定的字符串,格式化后输出到一个句柄中。下面演示fprintf()函数的使用方法,代码如清单所示。 • 清单 fprintf()函数的使用 • <?php • //建立一个句柄 • $fp = fopen('temp.txt','w'); • $money = 12345678.9; • //使用fprintf()函数格式化要输出的字符串,并写入文件 • $lenght = fprintf($fp, '%01.2f', $money); • //显示fprintf()函数返回的字符串长度 • echo $lenght; • ?>
7.2 字符串与数组 • 在本书第2章语法部分,介绍了字符串操作符的使用方法。使用字符串操作符,可以把1个或多个字符串,连接为1个长字符中。本节介绍的函数,主要用于分割和连接字符串。
7.2.1 将字符串分割成小块 • 使用str_split()函数可以把指定的字符串,按指定的长度分割,并返回一个数组,数组的单元就是分割后字符串。下面演示str_split()函数的使用方法,代码如清单7.3所示。 • 清单 str_split()函数的使用方法 • <?php • $enString="string"; • $cnString = "这是测试用字符串"; • echo "<b>使用默认长度分割字符串</b>"; • echo "<pre>"; • print_r(str_split($enString)); • echo "</pre>"; • echo "<b>使用指定长度分割字符串</b>"; • echo "<pre>"; • print_r(str_split($enString,4)); • echo "</pre>"; • ?>
7.2.2 在字符串中插入字符串 • 使用chunk_split()函数,可以根据参数指定的长度,把字符串分为若干段,在每段字符串后附上指定字符串后,重新连接为一个字符串,并返回。下面演示chunk_split()函数的使用方法,代码如清单所示。 • 清单 chunk_split()函数的使用方法 • <?php • $String = "这是测试用字符串"; • echo "<b>在字符串的指定长度后,添加默认字符串</b>"; • echo "<pre>"; • echo chunk_split($String,4); • echo "</pre>"; • echo "<b>在字符串的指定长度后,使用'-'分割符</b>"; • echo "<pre>"; • echo chunk_split($String,4,"-"); • echo "</pre>"; • ?>
7.2.3 字符串转化为数组 • 使用explode()函数,可以按指定的字符,分割另一个字符串,并返回一个数组。下面演示explode()函数的使用方法,代码如清单所示。 • 清单 explode()函数的使用方法 • <?php • $String = "使用空格 作为分割 字符串 的例子"; • $LString = "使用竖线|作为|分割字符串|的例子"; • echo "<b>使用空格来分割字符串</b>"; • echo "<pre>"; • print_r(explode(" ",$String)); • echo "</pre>"; • echo "<b>使用竖线来分割字符串</b>"; • echo "<pre>"; • print_r(explode("|",$LString)); • echo "</pre>"; • echo "<b>使用竖线来分割字符串,并指定返回的数组数</b>"; • echo "<pre>"; • print_r(explode("|",$LString,2)); • echo "</pre>"; • ?>
7.2.4 数组转化为字符串 • 使用implode()函数,可以使用指定的字符串,把一个数组连接为一个字符串。下面演示implode()函数的使用方法,代码如清单所示。 • 清单 implode()函数的使用方法 • <?php • //定义一个数组 • $array = array("我的","故乡","在","远方"); • //没有指定字符串的情况下连接数组 • $string = implode("",$array); • //显示连接后的数组 • echo $string; • echo "<br>"; • //使用|作为连接字符串 • $string = implode("|",$array); • //显示连接后的数组 • echo $string; • ?>
7.3 字符串与空格 • 在实际应用中,字符串经常读取,以及其他函数的操作,往往会产生一些多余的空格。这些多余的字符串,参与运算时,会产生错误的结果,而使用相关的字符串函数,可以很简单的解决这个问题。
7.3.1 去掉字符串左边的字符 • 使用ltrim()函数,可以去掉指定字符串中右边的指定字符,并返回去掉指字符后的字符串。下面演示ltrim()函数的使用方法,代码如清单所示。
7.3.2 去掉字符串右边的字符 • 使用rtrim()函数,可以去掉指定字符串中右边的指定字符,并返回去掉指字符后的字符串。下面演示rtrim()函数的使用方法,代码如清单所示。
7.3.3 去掉字符串两边的字符 • 使用trim()函数,可以去掉指定字符串中左右两边的指定字符,并返回去掉指字符后的字符串。下面演示trim()函数的使用方法,代码如清单所示。
7.4 字符串的比较 • 字符串的比较,主要集中在对类型,以及大小写的比较上。在实际应用中,在遇到同一个英文单词,如果其大小写不同,会使用运算结果出错的话,就可以先对字符串进行比较,再根据情况进行下一步的操作。
7.4.1 字符串比较 • 在表达式中,可以使用:==、!=、===、!==来进行字符串比较,下面演示比较字符串的方法,代码如清单所示。
7.4.2 使用函数比较字符串 • 使用strcasecmp()函数用于两个字符串进行比较大小。而strcmp()函数用于区分大小写的字符串的比较大小。下面演示strcmp()与strcasecmp()函数的使用方法,代码如清单所示。
7.5 字符串的替换与插入 • 本节主要介绍用于替换字符串的函数。替换字符串,即使用指定的字符串,替换掉原来字符串中的相关字符,以组成新的字符串来参与运算。现在流行网站使用的模板系统,都是使用字符替换作为基础的。
7.5.1 替换当前字符串中的字符 • 使用str_replace()函数,可以替换掉字符串中的相关字符,而产生一个新字符串。下面演示str_replace ()函数的使用方法,代码如清单所示。
7.5.2 在指定位置插入字符串 • 使用substr_replace()函数,可以在指定位置插入字符串,并返回一个新字符串。下面演示substr_replace ()函数的使用方法,代码如清单所示。
7.5.3 字符串替换函数与模板 • 根据str_replace()函数替换字符串的原理,可以实现简单的模板系统。下面演示简单模板系统的使用,代码如清单所示。
7.6 字符串与HTML • 在操作或读取HTML文件时,经常会遇到一些特殊的字符串,这些特殊的字符串,都是由HTML标签转换而成了。在操作带有HTML标签的字符串或文件时,可以使用相关函数来得到需要的结果。
7.6.1 把字符转化为HTML实体形式 • 使用htmlspecialchars()函数,可以把HTML文件中,类似&、'、"、<、>的字符,转换为HTML的实体形式。而使用htmlentities()函数据,可以把所有能转化为HTML实体的字符,都转换为HTML实体形式。下面演示htmlspecialchars()与htmlentities()函数的使用方法,代码如清单所示。
7.6.2 把HTML实体转化为特殊字符 • 使用htmlspecialchars_decode ()函数,可以把HTML的实体形式,转换为HTML格式。而使用html_entity_decode ()函数可以把所有转换为HTML实体的字符,转换为HTML格式。下面将演示这两个函数的使用方法,代码如清单所示。
7.6.3 换行符的转换 • 在HTML文件中使用“\n”,显示HTML代码后,并不能显示换行的效果。这时可以使用nl2br()函数,来把字符串的“\n” 替换为“<br />”。。下面将演示nl2br()函数的使用方法,代码如清单所示。
7.7 字符串与加密 • 字符串的加密与解密,在很多方面都有应用,例如对URL字符串的编码与解码。以及在涉及到一些敏感的字符串操作时,如用户名和密码时,也需要对这些字符串进行加密操作,来提高系统的安全性。 • 本节介绍函数中,只有与MD5相关的函数是字符串函数,其他函数应该属于URL函数。但是这些URL函数,同样可以使用于字符串操作,因些把这些函数统一进行介绍。
7.7.1 使用MIME base64编码加密和解密数据 • MIME base64是一种编码手段,而不是加密手段。字符串按照base64编码后,可以使二进制数据通过非纯8-bit的传输层传输,例如电子邮件的主体。 • 本小节主要是利用base64的编码与解码函数,来实现类似的字符串加密、解密操作。base64_encode()函数,可以对指定的字符串进行编码,并返回一个编码的字符串。base64_decode()函数,可以把一个使用base64_encode()函数编码的字符串,进行解码处理,并返回一个解码的字符串。下面演示这两个函数的使用方法,代码如清单所示。
7.7.2 编码和解码URL • 使用urlencode()函数,可以把字符串中除“-”、“_”符号与字母以外的字符,转换为“%16进制数”的形式,而空格将转换为“+”符号。而使用urldecode()函数据,可以还原使用urlencode()函数编码的字符串。 • urlencode()与urldecode()函数是URL处理函数,但是也可以用于对字符串过行编码,以方便在网络上进行传输。下面演示这两个函数的使用方法,代码如清单所示。
7.7.3 字符串与MD5 • MD5是一种加密方法,其可以把指定的字符串,转换为一个唯一的字符串,并且这个过程是不可逆的。使用md5()函数,可以返回一个字符串的MD5值,而使用md5_file()函数,则可以计算一个文件的MD5值。下面演示这两个函数的使用方法,代码如清单所示。
7.8 其他字符串函数 • 在前边的小节中,介绍了主要的字符串函数后,本小节将向读者介绍一些简单的字符串函数,虽然这些函数使用比较简单,但是在实际应用中,也经常被使用到。
7.8.1 计算字符串长度 • 使用strlen()函数,可以计算指定字符串的长度。这个函数经常被使用到,下面介绍其使用方法,代码如清单所示。 • strlen()函数的使用方法 • <?php • //定义一个字符串 • $string = "包括 空格的字符串"; • //使用strlen()函数计算字符串长度 • echo strlen($string); //输出17 • ?> • 注意:strlen()函数运行后,如果成功将返回要计算字符串的长度,否则返回0。
7.8.2 二进制数据转换成十六进制 • 使用bin2hex()函数,可以把指定的二进制数,转换为对应的十六进制数。下面介绍bin2hex()函数的使用方法,代码如清单所示。 • bin2hex()函数的使用方法 • <?php • //定义一个二进制数 • $bin = 0100110; • //使用bin2hex()函数把其转换为十六进制数 • $hex = bin2hex($bin); • //显示返回的值 • var_dump($hex); //输出:string(10) "3332383430" • ?> • 注意:bin2hex()函数运行后,将返回一个字符串。
7.8.3 ASCII码与字符串 • 在字符串操作中,可以使用ord()函数,返回字符的ASCII码,也可以使用chr()函数,返回ASCII码对应的字符。下面介绍这两个函数的使用方法,代码如清单所示。 • 清单 ord()与chr()函数的使用方法 • <?php • echo ord("a");//输出:97 • echo chr(98);//输出:b • ?> • ord()函数只有一个必选参数,其值是一个字符,ord()函数运行后,将返回这个字符的ASCII码。chr()函数只有一个必选参数,其值是一个ASCII码,chr()函数运行后,将返回这个ASCII码对应的字符。
7.8.4 HTML的标签控制 • 使用strip_tags()函数,可以过滤掉字符串中的HTML标签,并返回这个字符串。下面演示strip_tags()函数的使用方法,代码如清单所示。 • 清单 strip_tags()函数的使用方法 • <?php • //定义一个带有HTML及PHP标签的字符串 • $html = " • <div><font>HTML内容</font></div> • "; • //使用strip_tags()函数去除字符串中的标签 • $string = strip_tags($html); • //显示返回的字符串 • echo $string;//输出:HTML内容 • //使用strip_tags()函数去除指定的HTML标签 • $string = strip_tags($html,"<font></font>"); • //显示返回的字符串 • echo $string; //输出:<font>HTML内容</font> • ?>
7.8.5 解析URL • parse_url()并不是字符串函数,其主要使用是用于解析一个URL,并返回一个包括相关内容的数组。下面演示parse_url()函数的使用方法,代码如清单所示。
7.8.6 字母大小写的转换 • 在处理英文单词时,会遇到大小写不统一的问题,而且有些字符串处理函数,对于字母的大小写是敏感的。要比较两个大小写不同的单词是否想等,可以把要比较的单词,都转成小写或大写字母来实现。在PHP中转化字母为大写的函数是strtoupper(),把字母转换为小写的函数是strtolower(),下面介绍这两个函数的使用方法,代码如清单所示。
7.9 常见问题 • 本章主要介绍了与字符串相关的函数。在脚本运行时,很多地方都涉及到字符串的操作,本节主要介绍的是,字符串操作过程中出现的问题。
7.9.1 关于模板应用的问题 • 前面介绍了一般模板的原理,并演示了一个简单的模板系统。虽然这个模板实现的效果比较简单,但是经过进一步丰富的话,其也可以满足大部分程序的模板化需要。 • 关于模板文件,清单7.14的代码中的模板是以字符串的形式存在的。在实际应用中,可以把模板内容保存为一个文件,在要使用此模板时,可以使用文件系统函数读取这个文件,并替换其中的字符即可。 • 关于模板输出时,可以使用字符串输出函数,直接输出已经替换好的模板字符串,也可以把这个字符串写入一个文件,从而形成静态页面,方便浏览。
7.9.2 关于HTML编码的问题 • 在处理表单提交的变量时,为了防止用户提交HTML代码,可以使用strip_tags()函数,去掉指定变量中的HTML代码。 • 在有些情况下,脚本本身希望用户提交带有HTML编码的数据,而且需要把这些数据存储,供以后使用。带有HTML代码的数据,可以真接保存到文件中,但是大部分情况下,是把用户提交的数据保存到数据库中,由于数据库编码等原因,真接向数据库中存储带有HTML代码的数据,会产生错误。这时可以使用htmlspecialchars()函数,把HTML代码进行转化,再进行存储。 • 使用htmlspecialchars()函数转换过的HTML代码,可以直接保存到数据库中,在使用时可以直接向浏览器输出,这时在浏览器中看到的内容,是HTML的实体形式,也可以使用htmlspecialchars_decode()函数,把从数据库中取出的代码进行解码,再输出到浏览器中,这时看到的是按HTML格式显示的内容。