php学习笔记-php字符串及字符串常用函数总结-day04

导读:本篇文章讲解 php学习笔记-php字符串及字符串常用函数总结-day04,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

php字符串的三种定义方式

作为web开发语言,php最常打交道的数据类型就是字符串,所以如何灵活的处理字符串是十分重要的。

字符串最简单的指定方式就是使用单引号'或者双引号"以及定界符去指定字符串。

1.单引号

在单引号中的字符串,会被逐个字符来处理。

在单引号中 \ 还是被当作转义字符来处理,比如 \'被转换为\,双斜杠\\被转换为\

	$str1 = '你好呀';
	$say1 = '小白\'$str1\\n!!!!';
	echo $say1."\n";//小白'$str1\n!!!!

2.双引号

使用双引号字符串会花费php预处理器的处理时间,所以更推荐单引号的方式。

双引号中的特殊字符,也其实就是转义字符,换行符,回车符,制表符这些,与其他高级语言保持一致。

双引号中的特殊字符序列 转义后的字符
\ 反斜杠
\n 换行符
\r 回车符
\t 制表符
	$str2 = "哈哈哈哈,晚上好!";
	$say2 = "小白$str2";
	echo $say2."\n";//小白哈哈哈哈,晚上好!
	$say2 = "小白$str23123";//这里是因为php预处理器不知道这个变量到哪里结束
	echo $say2."\n";//出错,只会输出小白

通过使用插槽{}的方式,来说明变量的起止位置,和python一样,mustache语法也差不多

	$say2 = "小白{$str2},马上过年啦!";
	echo $say2."\n";//小白哈哈哈哈,晚上好!,马上过年啦!

3.定界符

语法格式 : <<<开始标识符 结束标识符

注意:

  • 定界符必须以 <<< 三个左尖括号开头
  • 开始标识符需要和结束标识符一样
  • <<<开始标识符后面不能有空格字符否则会解析错误

在对form表单的input标签赋值时,定界符赋值非常方便,还可以生成表单 nice

	$name = "张张";
	$pwd ="abc20001";
	
	$btn ="提交";
	$form1 = <<<form
	<form>
	用户名:<input type="text" value="$name" name="name"></br>
	密码:<input type="password" value="$pwd" name="name"></br>
	<input value="$btn" type="submit">
	</form>
	form;
	
	echo $form1;

输出:

<form>
用户名:<input type="text" value="张张" name="name"></br>
密码:<input type="password" value="abc20001" name="name"></br>
<input value="提交" type="submit">
</form>

字符串处理函数

1.字符串切片,修剪,转换函数

trim(),rtrim(),ltrim()

语法格式 :string trim(string str) ;函数功能 :trim去除字符串两边的空格。

	$str1 = "   你好呀!    ";
	$trim1 = trim($str1);
	echo $trim1."\n";// "你好呀!"

语法格式 :string ltrim(string str) ;函数功能 :ltrim去除字符串左边的空格。

	$str1 = "   你好呀!    ";
	$trim2 = ltrim($str1);
	echo $trim2."\n";// "你好呀!    "

语法格式 :string rtrim(string str) ;函数功能 :rtrim去除字符串右边的空格。

	$str1 = "   你好呀!    ";
	$trim3 = rtrim($str1);
	echo $trim3;//  "   你好呀!"

str_pad()

语法格式:string str_pad ( string str,int pad_length [,string pad_string [ ,int pad_type]])

功能:用填充字符串pad_str去填充str,并且将str的字符串长度填充到pad_length的长度,如果没有指定pad_str,则填充空格。

pad_tyoe,用来指定填充的模式,左边填充(STR_PAD_LEFT),右边填充(STR_PAD_RIGHT)和两侧填充(STR_PAD_BOTH),默认为右侧填充。(也可以用0,1,2来代替填充方式,如下面的php源码)。

	define('STR_PAD_LEFT', 0);
	define('STR_PAD_RIGHT', 1);
	define('STR_PAD_BOTH', 2);

填充示例:

	$src_str1 = "今天是2023/1/9";
	
	$dest_str = str_pad($src_str1,30," ",1);//默认右侧填充  "今天是2023/1/9             "
	echo $dest_str."\n";
	
	$dest_str = str_pad($src_str1,30," ",0);//两侧填充     "             今天是2023/1/9"
	echo $dest_str."\n";
	
	$dest_str = str_pad($src_str1,30," ",2);//左侧填充     "      今天是2023/1/9       "
	echo $dest_str."\n";

nl2br()

语法格式: string nl2br( string str)
函数功能: nl2br() 函数可以将字符串str中的换行符\n或\r转换为html中的换行符<br/>

tip:“我这里使用php7.4发现它\r不会转换为<br/>

	$cd_str = "你好啊小白\n,你准备干啥去\n,带上我呗~";
	$html_str = nl2br($cd_str);
	echo $html_str;
	/*
	 * 输出:
	 * 你好啊小白<br />
	 * ,你准备干啥去<br />
	 * ,带上我呗~
	 */

strtoupper(),strtolower(),ucfirst(),ucwords()

字符串大小写转换函数,strtoupper()将字符串转换为大写,strtolower()将字符串转换为小写,ucfirst()将字符串的首字母大写,ucwords()将字符串中的每个单词的首字母大写。

	// 我这里是在控制台输出,所以每个echo都加了个换行,方便观察
	$str_old =  "kill a robin";
	
	$str_new1 = strtoupper($str_old);
	echo $str_new1."\n";// “KILL A ROBIN”
	
	$str_new2 = strtolower($str_old);
	echo $str_new2."\n";// “kill a robin”
	
	$str_new3 = ucfirst($str_old);
	echo $str_new3."\n";// “Kill a robin”
	
	$str_new4 = ucwords($str_old);
	echo $str_new4."\n";// “Kill A Robin”

addslashes() 和 stripslashes()

语法格式 :string addslashes( string str)
函数功能 : 在预定义字符前添加反斜线(\),预定义字符包括 单引号',双引号",反斜线\
应用场景:
假设我们需要一个表单获取用户搜索的关键字,而我们的php程序用来获取请求参数和拼接sql。

	$name = " 张'三";
	$sql1 = "select from student_info where sname = '$name'";
	echo  $sql1."\n";// select from student_info where sname = ' 张'三'
	
	// 这里因为name中的表单数据的用户输入失误,而导致的sql语句不正常拼接
	
	//为了解决这一问题,提高程序的健壮性 addslashes()函数,可以将用户输入的错误信息转换为正常的信息,将单引号转换为转义字符从而不影响sql的拼接
	
	$name =addslashes($name);
	$sql2 = "select from student_info where sname = '$name'";// select from student_info where sname = ' 张\'三'
	echo $sql2;

语法格式 :string stripslashes( string str)
函数功能 : stripslashes()函数用于删除字符串str中的反斜线。功能恰好与上面的addslashes()函数相反。

	$name ="张\三";
	echo stripslashes($name);// "张三"

htmlspecialchars() 和 strip_tags()

htmlspecialchars()函数用来将字符串中的特殊字符(<,&,",>)转换成为对应的php预定义字符实体。

预定义实体 对应的html,xml标签
&lt; <
&amp; &
&gt; >
&quot;
&#039;

还有好多好多,这里只列举最常用的。

语法格式:string htmlspecialchars( string str,flags,character_set)
参数解析:flags和character_set都是可选参数
flags : 用来指定需要转换的双引号还是单引号,默认值为 ENT_COMPAT,表示转换双引号,不转换单引号。

  • ENT_COMPAT,默认值,表示转换双引号,不转换单引号。
  • ENT_QUOTES,默认值,表示转换双引号和单引号。
  • ENT_NOQUOTES,默认值,表示转换单引号,不转换双引号。

character_set: 用来指定字符串转换过程中的字符集,默认值为utf-8.
以下是可选字符集

  • UTF-8 :默认值
  • ISO-8859-1 :西欧
  • KOI8-R:俄语
  • GB2312:简体中文,国家标准字符集
  • BIG5:繁体中文,中国台湾地区使用
  • MacRoman: Mac操作系统使用的字符集
	$str1 = "<p>你好</p>";
	echo $str1."\n"; // <p>你好</p>
	
	$str1 = htmlspecialchars($str1);
	echo $str1; //&lt;p&gt;你好&lt;/p&gt;

strip_tags()函数用来将字符串中的html,xml,javascript,php的标签剔除掉。
语法格式:string strip_tags( string str)

	$str_1 ="<p>你好</p>";
	echo $str_1."\n";//<p>你好</p>
	// 使用strip_tags()函数将字符串中的标签去除,只留它的内容
	$str_1 = strip_tags($str_1);
	echo $str_1;// 你好

sprintf() 和 printf()

字符串格式化函数 sprintf()函数和printf()函数

语法格式:string sprintf(string format,arg1,arg2,arg3....,argn)
函数功能:返回字符串format格式化后的字符串。

语法格式:int printf(string format,arg1,arg2,arg3....,argn)
函数功能:将字符串参数format函数格式化后的字符串值打印到浏览器页面上,并且返回格式化后字符串的长度

format模板格式

转换格式 说明
% 打印%,不转换
b 转换成为二进制数
c 转换为对应的ascii码字符
d 转换成为对应的十进制数
e 科学计数法
o 转换八进制数
s 转换成字符串
u 转换为无符号十进制数
x 转换成小写十六进制数
X 转换成大写十六进制数
	$number1 = "49";
	echo $number1."\n";
	
	echo sprintf("%b",$number1)."\n";// 110001
	echo sprintf("%o",$number1)."\n";// 61
	echo sprintf("%x",$number1)."\n";// 31
	echo sprintf("%X",$number1)."\n";// 31
	echo sprintf("%c",$number1)."\n";// 1
	
	echo var_dump(sprintf("%s",$number1));//string(2) "49"

	$number1 = "49";
	echo $number1."\n";
	
	echo printf("%b",$number1)."\n";// 11000  16
	echo printf("%o",$number1)."\n";// 31  2
	echo printf("%x",$number1)."\n";// 31  2
	echo printf("%X",$number1)."\n";// 31  2
	echo printf("%c",$number1)."\n";// 1   1
	
	echo var_dump(printf("%s",$number1));// 49 int(2)

printf()和 sprintf()函数不同的就是,sprinft()会返回模板化后的字符串,而printf()会打印出模板后的字符串,并且返回其模板化后的长度。

2.字符串长度函数

strlen() 和 mb_strlen()

strlen()函数
语法格式:int strlen( string str)
函数功能: 返回字符串string的字节长度。

mb_strlen()函数
语法格式: int mb_strlen( string str [,string encoding])
函数功能:返回字符串string的字节长度,并且可以以指定的编码方式去解析字符串的长度。

tip:不同的文件编码,所占字节数不同。
例如:UTF-8编码。一个英文字符占一个字节长度,一个中文字符占三个字节长度。如果是GBK编码或者ANSI编码方式的话一个中文字符占2个字符。

	$content = "hello 小白";
	echo strlen($content)."\n";// 12   6+3x2=12
	
	$content2 = "hello 小白";
	echo mb_strlen($content2,"gbk");// 9 

3.子串操作函数

3.1 取出指定位置的子串

substr()

语法格式: string substr( string str ,int start [,int length])
函数功能:返回字符串中索引位于strat和strat+length之间的字符串。如果没有指定length,则返回从start索引开始到字符串末尾的子字符串。

mb_substr()

语法格式: string mb_substr( string str ,int start [,int length [, string encoding] ])
函数功能:返回字符串中索引位于strat和strat+length之间的字符串。如果没有指定length,则返回从start索引开始到字符串末尾的子字符串。并且可以设置encoding编码方式解析字符串。

mb_struct()

语法格式: string mb_structr( string str ,int start [,int length [, string encoding] ])
函数功能:返回字符串中索引位于strat和strat+length之间的字符串。如果没有指定length,则返回从start索引开始到字符串末尾的子字符串。并且可以设置encoding编码方式解析字符串。将字符串中的每个字符按照一个字节去解析,当遇到中文(默认占两个字节)时,截取时多余的一个字节将舍去。

	$content1 = "hi,下午好~我是字符串";
	echo strlen($content1)."\n";// 28 4+8*3=28
	echo mb_strlen($content1,"gbk")."\n";
	echo substr($content1,0,8)."\n";// 因为子串字符截取长度不够,导致出现中文字符字节缺失而乱码 hi,下�
	echo substr($content1,0,9)."\n";// hi,下午
	echo mb_substr($content1,0)."\n";//hi,下午好~我是字符串
	
	echo mb_strcut($content1,0,6,"gb2312")."\n";// hi,下

3.2 在字符串中查找子串的位置

strpos()

语法格式:int strpos( string str ,string substr[,int offset])
函数功能:查找子串在主串中第一次出现的索引位置,如果主串不存在对应的子串,那么将返回false,offset用于指定从主串哪个位置开始找。

strrpos()

语法格式:int strrpos( string str ,string substr[,int offset])
函数功能:查找子串在主串中最后一次出现的索引位置,如果主串不存在对应的子串,那么将返回false,offset用于指定从主串哪个位置开始找。

mb_strpos()

语法格式:int mb_strpos( string str ,string substr[,int offset [,string encoding]])
函数功能:和strpos()基本一样,区别就是mb_strpos()可以设置encoding的编码方式去解析字符串。(找第一次出现的位置)

mb_strrpos()

语法格式:int mb_strrpos( string str ,string substr[,int offset [,string encoding]])
函数功能:和strrpos()基本一样,区别就是mb_strpos()可以设置encoding的编码方式去解析字符串。(找最后一次出现的位置)


	$content2 = "If we can avoid the violent ecstasy, there will be no grief ";
	
	$substr_1 = "w";
	$substr_2 = "W";
	echo strpos($content2,$substr_1)."\n";//3
	echo strrpos($content2,$substr_1)."\n";//43
	
	// 区分大小写字母,所以W不会找到
	echo strpos($content2,$substr_2)."\n";
	echo strrpos($content2,$substr_2)."\n";

3.3 取出字符串中指定子串的剩余字符串

strstr()

语法格式:string strstr( string str,string substr)
函数功能:取出从(区分大小写的)substr开始的剩余子串,如果没找到返回false.

stristr()

语法格式:string stristr( string str,string substr)
函数功能:取出从(不区分大小写的)substr开始的剩余子串,如果没找到返回false.

	$content2 = "If we can avoid the violent ecstasy, there will be no grief ";
	$substr_1 = "we";
	echo strstr($content2,$substr_1)."\n";// we can avoid the violent ecstasy, there will be no grief 
	$substr_2 = "We";
	echo strstr($content2,$substr_2)."\n";// 区分大小写所以没找到
	$substr_2 = "If";
	echo strstr($content2,$substr_2)."\n";// If we can avoid the violent ecstasy, there will be no grief 

3.4 统计子串在字符串中出现的频率

substr_count()

语法格式: int substr_count(string str,string substr,int offset,int length)
函数功能:统计子串substr在主字符串str中出现的次数.

mb_substr_count()

语法格式:int mb_substr_count(string str,string substr,string encoding)
函数功能:统计子串substr在主字符串str中出现的次数,可以以encoding设置的编码方式去解析。

	$content3 = "And a list of all the repeated words.  ";
	$substr_1 = "a";
	echo substr_count($content3,$substr_1)."\n";

4.字符串比较函数

strcmp()

语法格式:int strcmp( string str1,string str2)
函数功能:以区分大小写的方式比较字符串str1和字符串str2.若两个字符串相等,则返回0,若str1大于str2则返回1,若str1小于str2则返回小于1的整数。

strcasecmp()

语法格式:string stristr( string str,string substr)
函数功能:以不区分大小写的方式比较字符串str1和字符串str2.若两个字符串相等,则返回0,若str1大于str2则返回1,若str1小于str2则返回小于1的整数。

	$password1 = "2020SOLO3517@12";
	$password2 = "2020sOLo3517@12";
	
	// strcmp区分大小写
	if(strcmp($password1,$password2)===0){
	    echo "密码一致,正在登录中"."\n";
	}
	
	if((strcmp($password1,$password2)<0)){
	    echo "密码不一致"."\n";
	}
	
	// strcasecmp 不区分大小写,所以登录成功
	
	if(strcasecmp($password1,$password2)===0){
	    echo "密码一致,正在登录中"."\n";
	}
	
	if((strcasecmp($password1,$password2)<0)){
	    echo "密码不一致"."\n";
	}

5.字符串连接和分割函数

implode()

语法格式:string implode( string glue,array arr)
函数功能:使用字符串glue将数组arr中的元素拼接成一个新的字符串。

	$arr_1 = array("橙子","西瓜","草莓","葡萄");
	$str_1 = implode("-",$arr_1);
	echo $str_1;// 橙子-西瓜-草莓-葡萄

strtok()

语法格式:string strtok(string str,string separator)
函数功能:使用分隔符对字符串str进行分割,若要进行连续分割则需要多次调用strtok()函数。

字符串分割遍历

	$str_2 = "白色,黑色,红色,绿色,蓝色";
	while ($str_2!==""){
	    $temp_str =  strtok($str_2,",");//每次使用strtok()函数去分割子串
	    echo $temp_str."\n";
	    $temp_str_pos = strpos($str_2,$temp_str);//确定子串的起始位置
	    $temp_str_size = strlen($temp_str);//确定子串的长度
	    $str_2 = substr($str_2,$temp_str_pos+$temp_str_size);//将主串求子串,并且重新赋值
	}

6.字符串替换函数

str_replace()

语法格式:mixed str_replace( mixed search,mixed replacement,mixed str)
函数功能:以区分大小写的方式将字符串str中的字符串search片段替换为字符串replacement.

	// str_replace()区分大小写替换,所以Good不会被替换成为nice
	$str_1 = "Good morning, and in case I don't see you, good afternoon, good evening, and good night!";
	echo str_replace("good","nice",$str_1)."\n";//Good morning, and in case I don't see you, nice afternoon, nice evening, and nice night!

substr_replace()

语法格式:mixed substr_replace( string str,string substr,int start [, int length])
函数功能:将字符串str中的start位置开始到start+length位置结束的字符串由replacement替换,若没有指定length则从start开始替换到字符串str末尾.

	$str_2 = "Good morning!";
	$str_replace1 = "day";
	echo substr_replace($str_2,$str_replace1,7,3)."\n";// Good modayng!
	echo substr_replace($str_2,$str_replace1,7);// Good moday

strtr()

语法格式:string strtr (string str,array replacements)
函数功能:将字符串str中所有的字符串转换为数组replacements中键名相对应的值。(字符串中的子串去和数组的键名匹配)

	$replace_arr = array("<p>"=>"<div>","</p>"=>"</div>","<strong>"=>"<i>","</strong>"=>"</i>");
	$str = "<p><strong>hello</strong></p>";
	echo strtr($str,$replace_arr);//<div><i>hello</i></div>

7.其他常用的字符串函数

strrev()

语法格式:string strrev(string str)
函数功能:将英文字符串的顺序颠倒过来,并且返回一个新的字符串。中文字符使用这个函数会出现乱码

	$str_1 = "咔嚓";
	echo strrev($str_1)."\n";// 中文字符使用这个函数会出现乱码   ��唒�
	$str_2 = "hello world";
	echo strrev($str_2);//dlrow olleh

str_repeat()

语法格式:string str_repeat(string str, int times)
函数功能:重复字符串str指定的time次数。

	$say_hello = "hello\t";
	echo str_repeat($say_hello,10);// "hello	hello	hello	hello	hello	hello	hello	hello	hello	hello"

mb_convert_encoding()

语法格式:string mb_convert_encoding(string str,string to_encoding [,mixed from_encoding])
函数功能:将字符串从form_encoding的编码方式转换为to_encoding.

	$say_1 ="早上好,以防我见不着你,所以下午好,晚上好,晚安!";// 默认编辑器编码是utf-8,每个中文字符占三个字节
	echo strlen($say_1)."\n";// 73
	
	$say_1 = mb_convert_encoding($say_1,"gbk");//现在将其改为gbk编码,则每个中文字符占两个字节
	echo strlen($say_1)."\n";// 49

tip:因为php-web那块儿准备在后面的文章去写,所以字符串中的一些url处理函数,放到后面和请求响应一块儿写。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/85343.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!