常用的字符串处理函数: (1)strlen(目标字符串):主要用来获取字符串的长度,返回值为字符的个数 案例: <?php $str="my name is xiaoqiang"; echo strlen($str);//结果为:20 //如果编码为gbk,一个汉字占用2个字符 $str="ab你好"; echo strlen($str);//结果:6 //如果编码为utf-8,一个汉字占用3个字符 $str="ab你好"; echo strlen($str);//结果:8 ?> (2)strtoupper(目标字符串):将目标字符串转换为大写 案例: <?php $str="abcd"; echo strtoupper($str); 结果:ABCD ?> (3)strtolower(目标字符串)将目标字符串转换为小写 案例: <?php $str="ABCD"; echo strtolower($str); 结果:abcd ?> (4)strrev(目标字符串):将目标字符串翻转 案例: <?php $str="abcd"; echo strrev($str); 结果:dcba ?> (5)trim(目标字符串[,特殊字符])去除目标字符串首尾的空格和特殊字符 案例: <?php $str=" abcd "; //在浏览器中看不出有什么区别 echo $str; echo trim($str); //我们可以通过计算字符串的长度来判断首尾的空格是否被去除 echo strlen($str);//字符串的长度为12 echo strlen(trim($str));//字符串的长度为4 ?> (6)ltrim(目标字符串):去掉目标字符串左边的空白字符 (7)rtrim(目标字符串):去除目标字符串右边的空白字符 (8)substr_count(目标字符串,小串);//计算小串在目标字符串中出现的次数 案例: <?php $str="this is my name name name "; echo substr_count($str,"name"); 结果为3 ?> (9)substr(目标字符串,开始位置[,截取字符的长度]): 主要用来从目标字符串中截取子字符串 案例: <?php 参数1:目标字符串 参数2:字符串的开始位置,起始位置为0,为负则从字符串结尾的指定位置开始 参数3:字符串的长度,默认是直到字符串的结尾,为负则从字符串末端返回 ①开始位置为正数,截取长度也是正数 $str="abcdedf"; echo substr($str,0,4);//结果:abcd ②开始位置为负数,截取长度为正数 $str="abcdedf"; echo substr($str,-3,4);//结果:edf ③开始位置为负数,截取长度也为负数 $str="abcdedf"; echo substr($str,-3,-1);//结果:ed ?> (10)str_replace(搜索值,替换值,目标字符串);//字符串的替换函数 案例: <?php $str="this is my name name name "; echo str_replace("name","<font color='red'>NAME</font>");//替换为红色 结果:this is my name name name 使用数组可一次性替换多个 $arr1=array("hello","world"); $arr2=array("你好","世界"); str_replace($arr1,$arr2,"hello world",$i);//$i计数器,代表替换了多少个 结果:你好,世界 ?> (11)md5(目标字符串);//MD5加密函数 注意:此加密函数不可逆,加密的字符串为32位字符串 案例: <?php $str="123"; echo md5($str); 结果:202cb962ac59075b964b07152d234b70 ?> base64_encode(string $str); //加密 base64_decode(string $str); //解密 (12)implode(连接符,目标数组); 主要用来将目标数组中的所有元素以某种连接符连接成一个字符串 案例: <?php $arr=array( "姓名", "电话", "电子邮箱" ); $str=implode("-",$arr); echo $str; 结果:姓名-电话-电子邮箱 ?> (13)explode(分隔符,目标字符串); 主要用来将目标字符串以某种分隔符拆分为数组元素,并返回该数组 案例: <?php $str="one|two|three|four"; $arr=explode("|",$str); 结果: array( 0=>one 1=>two 2=>three 3=>four ); ?> (14)strstr(目标字符串,子字符串); 主要用于查找子字符串在目标字符串中第一次出现的位置,并返回从该位置到字符串结尾的所有字符,如果没有找到,则返回false 案例: <?php $email="[email protected]"; $str=strstr($email,"@"); 结果:@163.com ?> (15)strrstr(目标字符串,子字符串); 主要用于查找子字符串在目标字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符,如果没有找到,则返回false 案例: <?php $str="姓名|电话|电子邮箱"; $substr=strrstr($str,"|"); 结果:|电子邮箱 ?> (16)利用strrstr和substr函数可实现截取最后某个出现的字符后面的所有内容 案例: <?php $email="[email protected]"; $str=substr(strrstr($email,"@"),1); 结果:163.com ?> (17)substr_replace(目标字符串,新子字符串,字符串开始位置,字符串返回长度); 参数1:目标字符串 参数2:代表目标字符串中子字符串要被替换成何种字符串 参数3:字符串的开始位置,起始位置为0,为负则从字符串结尾的指定位置开始 参数4:可选,字符串返回的长度,默认直到字符串的结尾,为负则从字符串末端返回 案例: <?php echo substr_replace("abcdef","###",1); 结果:a### echo substr_replace("abcdef","###",1,2); 结果:a###def echo substr_replace("abcdef","###",-3,2); 结果:abc###f echo substr_replace("abcdef","###",1,-2); 结果:a###ef ?> (18)strpos(目标字符串,要定位的字符串); 主要用来查找子字符串第一次出现的位置,返回int类型的值 案例: <?php echo strpos("abcdef","c"); 结果:2 ?> (19)strrpos(目标字符串,要定位的字符串); 主要用来查找子字符串最后一次出现的位置,返回int类型的值 案例: <?php echo strrpos("abcccdef","c"); 结果:4 ?> (20)nl2br(目标字符串); 主要用来将目标字符串中的换行符\n转换为html换行符<br/> ,并返回转换后的字符串 案例: <?php echo nl2br("我是\n中国人"); //在浏览器中查看网页源代码发现如下信息: 我是<br/> 中国人 ?> (21)htmlspecialchars(目标字符串); //主要用于字符串到html的转换 主要用来将目标字符串中的一些特殊字符转化为html实体,并返回一个字符串 echo htmlspecialchars("<a href='www.baidu.com'>百度</a>"); 若想在页面中显示:"<a href='www.baidu.com'>百度</a>",html应写为 "<a href='www.baidu.com'>百度</a>" 否则将只会在页面上显示一个 "百度" 链接 注意:要转换的特殊字符有如下: & 转换为 & " 转换为 " < 转换为 < > 转换为 > 标注:'&'等为html元素,'&'等为其显示的字符串 (22)htmlspecialchars_decode(目标字符串); 主要用来将目标字符串中的html实体转化为特殊字符,并返回一个字符串 htmlspecialchars_decode(目标字符串); 注意:转化html实体为特殊字符 &转换为& "转换为" <转换为<; >转换为>; (23)addslashes(目标字符串); 主要用于在目标字符串中的特殊字符前加上转义符"\",返回一个字符串 案例: <?php $str="this's my name"; echo $str; //结果:this's my name $str1=addslashes($str); echo $str1; //结果:this\'s my name ?> 注意: 1.默认情况下,在php.ini配置文件中magic_quotes_gpc为on,系统会对所有的$_GET、$_POST、$_COOKIE数据自动运行addslashes()函数,不会对已经被magic_quotes_gpc转义过的字符串使用addslashes(),因为这样会导致双层转义 2.php中的字符串向数据库进行写入时,为了避免数据库错误,需要对特殊字符进行转义,这些特殊字符主要包括: ①单引号 ②双引号 ③反斜线 ④NULL (24)案例:可以对magic_quotes_gpc()进行检测以便确定是否使用addslashes()函数 <?php if(!get_magic_quotes_gpc()){ $username=addslashes($_POST['username']); }else{ $username=$_POST['username']; } ?> (25)stripslashes(目标字符串):是addslashes()函数的反函数 案例: <?php $str="this\'s my name"; echo $str; echo "<br/>"; echo stripslashes($str); 结果: this\'s my name this's my name ?> (26)Ucfirst(目标字符串); 将字符串的第一个字符转换成大写 (27)Ucwords(目标字符串); 将字符串中每个单词转换为大写 htmlentities(目标字符串,指定模式,编码);//主要用于字符串与html间的相互转换 参数2:模式主要用来如何处理字符串中的引号 NET_COMPAT:转换双引号,忽略单引号,它是默认值 ENT_NOQUOTES:忽略双引号和单引号 ENT_QUOTES :转换双引号和单引号 此函数将所有的字符串都转换成html字符串,而htmlspecialchars()函数只是将字符串中的某些特殊字符转换成html格式 在应用htmlentities()函数对字符串到html的转换过程中,设置参数charset的字符集为"utf-8",可以避免在输出中文字符时出现乱码的问题,其前提是页面编码是utf-8 案例1: <?php $str='<table> <tr> <td></td> </tr> </table>'; echo htmlentities($str,ENT_QUOTES,"UTF-8")."<BR/>"; //设置转换的字符集为utf-8 ?> 字符串与html相互转换的技术应用最广泛的地方就是输出数据库中的数据,例如,当数据库中存储的是一个可以运行程序的代码时,如果没有对数据进行转换而直接输出,那么输出的结果将是该程序的运行结果,而不是程序代码 str_shuffle(字符串);//打乱字符串中字符的顺序 案例: <?php $num=str_shuffle("123456789"); $nums=substr($num,0,4); for($i=0;$i<4;$i++){ echo "<img src=images/".substr(strval($num),$i,1).".gif>"; } ?> 问题? 如何解决用substr()函数对中文字符串截取时的乱码? 使用substr()函数是按字节截取字符串的,在截取中文字符串时由于一个汉字由两个字符组成,所以如果只截取一个字符就会出现乱码 我们可以通过在substr()函数的基础上封装一个自定义函数,在进行截取之前判断其是中文字符串还是英文字符串,如果是中文字符串则每次截取两个字节,如果是英文字符串则每次截取一个字节,这样就不会出现乱码问题了 案例1: function msubstr($str,$start,$len){ //$str指的是字符串,$start指的是字符串的起始位置,$len指的是截取的长度 $strlen=$start+$len; //$strlen存储字符串的总长度(字符串的起始位置+要截取的长度) for($i=0;$i<$strlen;$i++){ //通过for循环语句,逐个读取字符串 if(ord(substr($str,$i,1))>0xa0){ //如果字符串中首个字节的ASCII码数值大于0xa0,则表示为汉字 $tmpstr.=substr($str,$i,2); //如果每次取出两位字符赋给变量 $tmpstr,即等于一个汉字$i++ $i++; //变量自动加1 }else{ $tmpstr.=substr($str,$i,1); //如果不是汉字,则每次取出一个字符赋给变量$tmpstr } } return $tmpstr; //输出截取后的字符串 } 如何使用mb_substr()函数截取中文字符串? 通过mb_ssubstr()函数可以对中文字符串进行截取,并且不会出现乱码的问题,但是应用该函数,需要打开 extension=php_mbstring.dll扩展。 语法格式: mb_substr(要截取的字符串,起始位置,截取长度,编码);