字符串函数
一、字符串的统计和加密
strlen($str):得到字符串长度
mb_strlen($str,'utf-8'):获得字符串长度,可用于含中文的字符串
'utf-8':可选参数,设置字符编码方式,若省略该参数则使用内部字符编码
str_word_count($str ,$format ,$charlist):统计字符串中含有的单词数
$format:可选参数,决定以什么形式输出统计结果
0:默认,直接返回整型数字;
1:将各单词作为键值输出为新的索引数组;
2:将各单词出现的位置作为键名,各单词作为键值,输出为新的数组;
$charlist:可选参数,附加字符串,其中的字符在统计时作为单词的组成部分
count_chars($str ,$mode):统计字符串中每个字节出现的次数,返回为数组
$mode:
0:以每个字节作为键名,出现次数作为键值,输出为数组
1:输出的数组只列出出现次数大于0的字节
2:输出的数组只列出出现次数等于0的字节
3:输出由所有使用了的字节组成的字符串
4:输出由所有未使用的字节组成的字符串
md5($str):返回以MD5散列值方式加密后的字符串
二、去除空格或其他字符串
trim($str ,"指定要去除的字符"):删除字符串首尾两端的空格、预定义字符或指定字符
若不指定第二个参数,trim()将默认去除这些字符:
普通空格符
\t 制表符
\n 换行符
\r 回车符
\0 空字节符
\x0B 垂直制表符
rtrim($str ,"指定要去除的字符"):删除字符串右端的空格、预定义字符或指定字符
chop($str ,"指定要去除的字符"):chop()为rtrim()的别名,功能相同
ltrim($str ,"指定要去除的字符"):删除字符串左端的空格、预定义字符或指定字符
三、字符串的编辑
str_pad($str ,$length ,$pad_str ,STR_PAD_RIGHT):用另一字符串把该字符串$str填充为指定长度
$length:指定长度,该值需大于$str的原长度,否则不发生填充
$pad_str:可选参数,指定用来填充的字符串,当该参数未被指定时,则$str被空字符串填充
STR_PAD_RIGHT:默认值,默认向字符串$str右端填充,可改为:STR_PAD_LEFT(左端)、STR_PAD_BOTH(两端)
str_repeat($str ,#):重复字符串#次
#:重复显示字符串$str的次数,需大于等于0,等于0时函数返回空字符串
strrev($str):反转字符串(abc! -> !cba)
str_shuffle($str):随机打乱字符串
strtr($str ,$from ,$to):转换字符串中的某些字符
$from:指定要被转换的字符
$to:转换成什么字符
“$from ,$to”可用array("from"=>"to",...)的数组形式代替
例:
$arr=array("i"=>"I","autumn"=>"Autumn");
echo strtr("i am autumn",$arr); //I am Autumn
四、字符串的拆分与拼接
parse_str($str ,$arr):将字符串解析成多个变量
$arr:表示被解析的变量将对应成为数组的各元素
例:
$str="first=value&arr1[]=foo+bar&arr1[]=baz";
parse_str($str); parse_str($str,$arr);
echo $first; //value echo $arr['first']; //value
echo $arr1[0]; //foo bar echo $arr['arr1'][0]; //foo bar
echo $arr1[1]; //baz echo $arr['arr1'][1]; //baz
str_split($str ,$length):将字符串分割为数组
$length:可选参数,表示按多少个字符为一段分割字符串给数组各元素,若不设置该参数则分割单个字符给各数组元素
例:
$str="Hello,world!";
print_r(str_split($str));
//Array([0]=>H[1]=>e[2]=>l[3]=>l[4]=>o[5]=>,[6]=>w[7]=>o[8]=>r[9]=>l[10]=>d[11]=>!)
print_r(str_split($str,5)); //Array([0]=>Hello[1]=>,worl[2]=>d!)
explode("分隔符" ,$str ,$num):将字符串以分隔符拆分成数组
$num:可选参数
若为正,则输出的数组最多包含$num个元素,最后一个元素会包含分割后的剩余部分
若为负,则输出的数组将删除最后的$num个元素
若为0,则等同于$num=1,输出的数组仅包含一个元素,该元素键值即为原字符串
例:
$str="abc#1234#ABCDE#hello world";
var_dump(explode("#",$str));
//array(4){[0]=>"abc"[1]=>"1234"[2]=>"ABCDE"[3]=>"hello world"}
var_dump(explode("#",$str,3));
//array(3){[0]=>"abc"[1]=>"1234"[2]=>"ABCDE#hello world"}
var_dump(explode("#",$str,-1));
//array(3){[0]=>"abc"[1]=>"1234"[2]=>"ABCDE"}
var_dump(explode("#",$str,0));
//array(1){[0]=>"abc#1234#ABCDE#hello world"}
chunk_split($str ,$length ,$str_end):将字符串以分割符分成不连续的小段组成的新字符串
$length:可选参数,指定按多少个字符为一段分割字符串,不指定该参数时字符串原样输出
$str_end:可选参数,指定分割符,不指定该参数时默认以一个空格作为分割符
wordwrap($str ,$width ,$str_end ,false):将本身有断开的字符串打断为字符段,当字符串本身为连续的完整字符串时不执行打断
$width:指定打断后的每个字符段可容纳的最大字符数
$str_end:指定执行打断所用的分割符
false:默认值,默认当打断后的字符段中的字符数超过指定的$width时不会执行强行打断而破坏连续性,true为强行打断
implode("连接符" ,$arr):将数组的键值以连接符连接成字符串
例:
$arr=array("a","b","username"=>"ZWQ","age"=>25,"c");
var_dump(implode("#",$arr)); //"a#b#ZWQ#25#c"
join("连接符" ,$arr):将数组的键值以连接符连接成字符串,作用等同于implode()
快速创建字符串的方法:
①$str=implode("",range(0,9));
②$str=join("",range("a","z"));
③$arr=array_merge(range(0,9),range("a","z"),range("A","Z"));
$str=implode("",$arr);
五、字符串的截取
substr($str ,$start ,$length):截取字符串中的一段字符
$start:起始位置偏移量
>=0时,表示从偏移量对应位置的字符开始向右截取至结尾
<0时,表示以从右向左的第$start个位置的元素开始向右截取至结尾
$length:截取长度
>0时,表示要截取的元素个数
<0时,表示截取到从右向左的第$length个元素,但不包含该元素
=0时,返回空字符
例:
$str="abcdef";
echo substr($str,2); //cdef
echo substr($str,-3); //def
echo substr($str,0,3); //abc
echo substr($str,2,-2); //cd
echo substr($str,-5,-2); //bcd
mb_substr($str ,$start ,$length ,'utf-8'):截取字符串中的一段字符,功能与substr相似,但可根据字符集参数来截取中英字符混合的字符串
strstr($str ,$search ,false):在字符串$str中查找$search字符段第一次出现的位置,如果找到则返回从该位置到结尾的字符,包括该位置的字符;如果没找到则返回false;
false:默认值,若为true则返回$search第一次出现的位置之前的字符,不包括该位置的字符
strchr($str ,$search):功能同strstr()
stristr($str ,$search ,false):功能同strstr(),但不区分大小写的查找$search在$str中第一次出现的位置
strrchr($str ,$search):在字符串$str中查找$search字符段最后一次出现的位置,如果找到则返回从该位置到结尾的字符,包括该位置的字符;如果没找到则返回false;
六、字符串的查找与替换
strpos($str ,$search ,$start_num):在指定字符串$str中查找另一个字符串$search,如果找到则返回这个字符串的第一次出现的位置;如果没找到则返回false;
$start_num:可选参数,起始偏移量,默认为0,从该偏移量对应位置的字符开始查找,之前的字符跳过,不能为负值
例:
$str="abcde";
$search="a";
if(strpos($str,$search) !== false){
echo "找到";
}else{
echo "未找到";
}
注意:若要查找的字符段在开头,函数strpos()会正常返回其位置为0,但在if判断时会将0默认转为false,故这里需要用“!==”判断值与类型,以排除位置为0的情况
stripos($str ,$search ,$start_num):功能同strpos(),但忽略大小写地查找
例:
查找填写的邮箱中是否有“@”,是否合法
$email="819508293@qq.com";
$search="@";
if(stripos($email,$search)){
echo "合法";
}else{
echo "不合法";
}
这里如果@放在了开头,stripos()返回的结果为0->false,则刚好判定为不合法
strrpos($str ,$search ,$offset):在指定字符串$str中查找另一个字符串$search,如果找到则返回这个字符串的最后一次出现的位置;如果没找到则返回false;
$offset:可选参数,为负数时表示查找到距离字符串$str的结尾第$offset个位置的字符时停止查找
strripos($str ,$search ,$offset):功能同strrpos(),但忽略大小写地查找
str_replace($search ,$replace ,$str):严格区分大小写地在字符串$str中查找另一个字符串$search,如果找到就替换成字符串$replace,返回替换后的字符串;如果没找到就不做操作,返回原字符串
str_ireplace($search ,$replace ,$str):功能同str_replace(),但不区分大小写的查找并替换
substr_replace($str ,$replace ,$start ,$length):用另一字符串$replace替换原字符串$str中的部分字段
$start:起始位置偏移量
$length:可选参数,指定$str中将被替换掉的字段长度,默认为原$str的长度;
若为负数,表示从$start位置开始到距离结尾$length位置之间的字段将被替换掉
若为0,表示仅将$replace插入$start位置,不进行替换(字符串的中间插入)
例:
$str="abc123abc123abc123";
$replace="def";
echo substr_replace($str,$replace,3); //abcdef
echo substr_replace($str,$replace,3,0); //abcdef123abc123abc123
echo substr_replace($str,$replace,3,-2); //abcdef23
七、大小写转换
strtolower($str):字符串转为小写
strtoupper($str):字符串转为大写
ucfirst($str):字符串首字母转为大写
ucwords($str):字符串中每个单词的首字母转为大写
八、字符串比较
substr_count($str1 ,$str2 ,$offset ,$length):比较字符串$str2在字符串$str1中出现的次数
$offset:可选参数,$str1的起始偏移量
$length:可选参数,对$str1的搜索比较长度
similar_text($str1 ,$str2):输出两个字符串中相同字符的数量
strcasecmp($str1,$str2):不区分大小写地比较两个字符串(以二进制比较)
$str1>$str2,则strcasecmp($str1,$str2)为1 >0
$str1=$str2,则strcasecmp($str1,$str2)=0
$str1<$str2,则strcasecmp($str1,$str2)为-1 <0
strcmp($str1 ,$str2):区分大小写地比较两个字符串(以二进制比较)
strncasecmp($str1 ,$str2 ,$len):比较两个字符串的前$len个字符,不区分大小写(以二进制比较)
strncmp($str1 ,$str2 ,$len):比较两个字符串的前$len个字符,区分大小写(以二进制比较)
strnatcasecmp($str1 ,$str2):以自然顺序法比较两个字符串,不区分大小写
strnatcmp($str1 ,$str2):以自然顺序法比较两个字符串,区分大小写
strspn($str1 ,$str2 ,$start_num ,$length):遍历字符串$str1中的各字符,当首次遇到的字符(单个或连续多个)被包含于限定字符串$str2中时,返回该段字符的长度,而当首次遇到的字符即为不包含于限定字符串$str2中时,返回结果为0
$start_num:可选参数,起始偏移量,表示从该位置向右开始遍历字符串$str1中的各字符
$length:可选参数,表示检查$str1中的字符的长度,>=0时检查$length个字符,<0时检查到距离结尾$length个字符的位置时结束
例:
echo strspn("foo","o"); //0
echo strspn("ofoo","o"); //1
echo strspn(" ofoo","o"); //0
echo strspn("foo","o",1,2); //2
strcspn($str1 ,$str2 ,$start_num ,$length):遍历字符串$str1中的各字符,当首次遇到的字符(单个或连续多个)不被包含于限定字符串$str2中时,返回该段字符的长度,而当首次遇到的字符即为包含于限定字符串$str2中时,返回结果为0
$start_num、$length:可选参数,同函数strspn()中的参数
例:
echo strcspn("foo","o"); //1
echo strcspn("ofoo","o"); //0
echo strcspn(" ofoo","o"); //1
echo strcspn("hello","world"); //2 h e
九、HTML标签关联
ord($str):得到一个字符的ASCII码值,若$str为字符串则返回第一个字符的ASCII码值
chr($ascii):根据ASCII码值得到指定字符
strip_tags($str ,$allowTags):去除字符串$str中的HTML和PHP标签
$allowTags:可选参数,允许保留的标签
例:
$str="<h1>my name is \r\n'Autumn'</h1><!--Comment--><a href='www.baidu.com'>PHP</a>";
echo strip_tags($str); //my name is 'Autumn'PHP
echo strip_tags($str,"<a>"); //my name is 'Autumn'PHP
echo strip_tags($str,"<h1><a>");
htmlentities($str ,ENT_COMPAT|ENT_HTML401 ,'utf-8' ,true):将字符转换为HTML实体,中文字符等会一起转换掉
ENT_COMPAT:可选参数,默认为转换双引号保留单引号,ENT_QUOTES为两者均转换,ENT_NOQUOTES为两个均保留不转换
ENT_HTML401:可选参数,默认转换为HTML4.01,包括ENT_HTML401/ENT_XML1/ENT_XHTML/ENT_HTML5
'utf-8':可选参数,PHP5.4.0之前转换的编码方式默认为ISO-8859-1,PHP5.4.0及之后默认为UTF-8
true:可选参数,默认为true,转换一切,若为false则不会转换现有的HTML实体
例:
$str="<h1>my name is 'Autumn'</h1>";
echo htmlentities($str); //<h1>my name is 'Autumn'</h1>
htmlspecialchars($str ,ENT_COMPAT|ENT_HTML401 ,'utf-8' ,true):将特殊字符转换为HTML实体,中文字符等不会被转换,推荐使用
特殊字符包含:& " ' < >
参数同函数htmlentities()的参数
nl2br($str):将字符串$str中的\r、\n、\r\n 替换为<br>,使得在源代码页面的换行标签变为<br>,且页面的换行效果也显示出来
addcslashes($str ,$charlist):在字符串$str中包含于限定字符串$charlist中的字符前添加反斜线转义该字符
stripcslashes($str):删除由函数addcslashes()添加的反斜线转义符,将已转义的字符进行反转义
addslashes($str):在预定义字符前添加反斜线转义符,以正常引用这些预定义字符
预定义字符包含:' " \ null
用途:在向数据库中插入含有预定义字符的数据时
stripslashes($str):删除由函数addslashes()添加的反斜线转义符,对引用的预定义字符进行反引用
quotemeta($str):在预定义字符前添加反斜线转义符,以正常引用这些预定义字符
预定义字符包含:. \ + * ? [ ^ ] ( $ )