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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 本文总结了PHP中字符串的三种定义方式和常用字符串处理函数,包括字符串的修剪、转换、长度计算、子串操作、比较、连接、分割及替换等操作。

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处理函数,放到后面和请求响应一块儿写。

相关文章
|
2月前
|
PHP
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
本文介绍了解决PHP常见问题的步骤,包括定位和创建`php.ini`文件,以及解决`mb_strlen()`函数未定义和DLL模块加载错误的具体方法。
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
|
2月前
|
存储 Java 数据库连接
php学习笔记-代码基本语法-day01
本文是关于PHP编程语言的基础语法学习笔记,内容包括PHP的介绍、注释风格、数据类型、命名规范、常量和变量的使用,以及变量和常量相关的常用函数。文中详细解释了PHP的基本语法元素和一些易混淆的概念,如传值赋值与传址赋值、可变变量,以及如何检查变量是否已定义或为空。
php学习笔记-代码基本语法-day01
|
2月前
|
JavaScript 前端开发 安全
php学习笔记-普通表单参数提交获取及页面的重定向和一个登录小demo-day05
本文介绍了PHP中普通表单参数的提交获取、页面重定向的方法,并通过一个登录示例演示了表单参数的封装和页面跳转处理。
|
2月前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
2月前
|
存储 API PHP
php学习笔记-php数组的创建和使用,数组常用函数-day03
关于PHP数组的创建、使用以及常用函数的详细学习笔记。
php学习笔记-php数组的创建和使用,数组常用函数-day03
|
2月前
|
JavaScript Java PHP
php学习笔记-php运算符,类型转换,打印输出语句相较于其他语言的特殊部分-day02
本文是第二天的PHP学习笔记,涵盖了PHP中运算符的使用、类型转换方式,以及打印输出语句的特点,展示了其相较于其他编程语言的一些特殊之处。
php学习笔记-php运算符,类型转换,打印输出语句相较于其他语言的特殊部分-day02
|
1月前
|
Unix PHP 数据库
PHP日期和时间Date()函数获取当前时间
通过灵活运用 `date()`函数及其丰富的格式选项,PHP开发者可以轻松地在应用程序中处理和展示日期及时间信息。无论是需要精确到秒的完整时间戳,还是仅仅展示日期或时间的某一部分,`date()`函数都能胜任。理解并熟练应用这些格式化技巧,对于提升代码的可读性和维护性至关重要。
35 1
|
2月前
|
SQL 关系型数据库 MySQL
php学习笔记-连接操作mysq数据库(基础)-day08
本文介绍了PHP中连接操作MySQL数据库的常用函数,包括连接服务器、设置字符集、关闭连接、选择数据库、结果集释放、获取影响行数以及遍历结果集等操作。通过书籍查询的实例演示了如何使用这些函数进行数据库操作,并提供了一个PHP操纵MySQL数据库的模板。
php学习笔记-连接操作mysq数据库(基础)-day08
|
2月前
|
前端开发 PHP
php学习笔记-php文件表单上传-day06
本文介绍了PHP文件上传处理流程、预定义变量`$_FILES`的使用、文件上传状态代码以及文件上传实现函数。同时,通过一个文件上传的小例子,演示了文件上传表单的创建、文件上传表单处理的PHP页面编写以及运行测试输出。
php学习笔记-php文件表单上传-day06
|
2月前
|
JavaScript 程序员 PHP
php学习笔记-php自定义函数-day05
本文介绍了PHP自定义函数的创建、调用、参数赋值以及作用域和生命周期,还探讨了`global`和`static`关键字的使用,以及`return`、`exit`和`die`的不同用法。
下一篇
无影云桌面