为了账号安全,请及时绑定邮箱和手机立即绑定

PHP——字符串

标签:
PHP

1、定义

字符串是有另个或多个字符组成的集合

字符可以是:①数字 ②字母 ③特殊字符 ④不可见字符(\n、\t、\r等等)


2、单引号和双引号的区别

①双引号:双引号中的内容是经过PHP的语法分析器解析过的,任何变量在双引号中都会被转换为它的值进行显示输出

②单引号:单引号中的内容是"所见即所得"的,无论有无变量,都会被当做普通字符串原样输出。

注意:在进行SQL查询之前,所有的字符串都必须加单引号,以避免可能的注入漏洞和SQL错误。



3、字符串连接

①字符串连接符"."

②字符串连接符无法实现大量简单字符串的拼接,PHP允许程序员在双引号中直接包含字符串变量

123456<?php    $name='Jormin';    $web='ww.Jormin';        //注意:在$name和$web之间加入字符串后,$web前面的字符串都不显示,包括$name    echo "$name$web.com";?>


4、字符串操作

①去除字符串首位空格和特殊字符:

trim(string,charlist)
参数描述
string必需。规定要检查的字符串。
charlist可选。规定要转换的字符串。如果省略该参数,则删除以下所有字符:
  • "\0" - NULL

  • "\t" - tab

  • "\n" - new line

  • "\x0B" - 纵向列表符

  • "\r" - 回车

  • " " - 普通空白字符

trim():两侧

ltrim():左侧

rtrim():右侧

12345678<?php    $str="\r\t\0\0@_@(:测试:)@_@";    $charlist="\r\t\0(::)@_@";    echo '原字符串为:'.$str.'<p>';    echo 'charlist为:'.$charlist.'<p>';    echo '不设置charlist的删除结果:'.trim($str).'<p>';    echo '设置charlist的删除结果:'.trim($str,$charlist);?>

运行结果:

原字符串为: @_@(:测试:)@_@

charlist为: (::)@_@

不设置charlist的删除结果:@_@(:测试:)@_@

设置charlist的删除结果:测试


②转义、还原字符串数据

1>手动:简单字符串

使用转义字符 "\" 或者使用addcslashes()方法对字符串进行还原

【1】转义字符


123<?php    echo 'select * from t_book wbere bookname=\'人月神话\'';?>

运行结果:

select * from t_book wbere bookname='人月神话'

【2】使用addcslashes()函数


12345678<?php$str='人月神话adda';echo'原字符串:'.$str.'<p>';$a=addcslashes($str,"人月神话");echo'手工转义后的字符串:'.$a.'<p>';$b=stripcslashes($a);echo'还原后的字符串:'.$b.'<p>';?>

运行结果:

原字符串:人月神话adda

手工转义后的字符串:\344\272\272\346\234\210\347\245\236\350\257\235adda

还原后的字符串:人月神话adda


2>自动:数据量大的字符串

使用addslashes()方法进行转义,然后使用stripslashes()方法进行还原

注意:所有数据在插入数据库之前,有必要用addslashes()方法进行转义,以免出现错误


12345678<?php    $str="selet * from t_book where bookname='人月神话'";    echo '原字符串:'.$str.'<p>';    $a=addslashes($str);    echo '自动转义后的字符串:'.$a.'<p>';    $b=stripslashes($a);    echo '还原后的字符串:'.$b.'<p>';?>

运行结果:

原字符串:selet * from t_book where bookname='人月神话'

自动转义后的字符串:selet * from t_book where bookname=\'人月神话\'

还原后的字符串:selet * from t_book where bookname='人月神话'


③获取字符串长度

使用strlen()方法

注意:汉子占两个字节,其余字符占一个字节。

1234<?php    $str="人月神话是一本思维角度很棒的书。";    echo 'str的长度为:'.strlen($str);?>

运行结果:

str的长度为:48


④截取指定字符串

使用substr()方法

注意:

1>下标是从0开始

2>substr()截取中文字符时,如果截取的字符串出现单数,就会出现中文乱码的情况,因为中文占两个字节。要解决这个问题,需要用substr()自定义一个方法。

实例:在web页面中,经常需要对超长文本进行部分显示,来保证页面的合理布局。

12345<?php    $str='PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。';    echo '原字符串:<p>'.$str.'<p>';    echo '截取后字符串显示:<p>'.substr($str,0,101).'......';?>

运行结果:

原字符串:

PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。

截取后字符串显示:

PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快......


⑤比较字符串

1>按照字节进行比较

【1】strcmp()函数:区分大小写,网站登录的时候可以用次方法来检测大小写是否匹配。

定义和用法

strcmp() 函数比较两个字符串。

该函数返回:

  • 0 - 如果两个字符串相等

  • <0 - 如果 string1 小于 string2

  • >0 - 如果 string1 大于 string2

语法

strcmp(string1,string2)
参数描述
string1必需。规定要比较的第一个字符串。
string2必需。规定要比较的第二个字符串。

提示和注释

注释:该函数是二进制安全的,且对大小写敏感。


【2】strcasecmp()函数:不区分大小写,具体用法和strcmp()一样。

12345678<?php    $str1='php';    $str2='PHP';    echo 'str1='.$str1.'<p>';    echo 'str2='.$str2.'<p>';    echo 'strcmp()函数比较结果:'.strcmp($str1,$str2).'<p>';    echo 'strcasecmp()函数比较结果:'.strcasecmp($str1,$str2).'<p>';?>

运行结果:

str1=php

str2=PHP

strcmp()函数比较结果:1

strcasecmp()函数比较结果:0


2>按照自然排序法进行比较:对字符串中的数字进行比较,将数字按照大小进行排序

【1】strnatcmp()函数:区分大小写

定义和用法

strnatcmp() 函数使用一种“自然”算法来比较两个字符串。

在自然算法中,数字 "2" 小于数字 "10"。在计算机排序中,"2" 大于 "10",这是因为 "2" 大于 "10" 的第一个数字。

该函数返回:

  • 0 - 如果两个字符串相等

  • <0 - 如果 string1 小于 string2

  • >0 - 如果 string1 大于 string2

语法

strnatcmp(string1,string2)
参数描述
string1必需。规定要比较的第一个字符串。
string2必需。规定要比较的第二个字符串。

提示和注释

注释:该函数对大小写敏感。


【2】strnatcasecmp()函数:不区分大小写,具体用法和strnatcmp()函数一样。


1234567891011<?php    $str1='php2?';    $str2='PHP2?';    $str3='PHP10?';    echo 'str1='.$str1.'<p>';    echo 'str2='.$str2.'<p>';    echo 'str3='.$str3.'<p>';    echo 'strcmp(str2,str3)比较结果:'.strcmp($str2,$str3).'<p>';    echo 'strnatcmp(str2,str3)比较结果:'.strnatcmp($str2,$str3).'<p>';    echo 'strnatcasecmp(str1,str3)比较结果:'.strnatcasecmp($str1,$str3).'<p>';?>

运行结果:

str1=php2?

str2=PHP2?

str3=PHP10?

strcmp(str2,str3)比较结果:1

strnatcmp(str2,str3)比较结果:-1

strnatcasecmp(str1,str3)比较结果:-1


3>指定从源字符串的位置开始比较:比较字符串中的前n个字符

【1】strncmp()函数:区分大小写

定义和用法

strncmp() 函数比较两个字符串。

该函数返回:

  • 0 - 如果两个字符串相等

  • <0 - 如果 string1 小于 string2

  • >0 - 如果 string1 大于 string2

语法

strncmp(string1,string2,length)
参数描述
string1必需。规定要比较的第一个字符串。
string2必需。规定要比较的第二个字符串。
length必需。规定每个字符串用于比较的字符数。

提示和注释

注释:该函数是二进制安全的,且对大小写敏感。


【2】strncasecmp():不区分大小写,具体用法和strncmp()一样。

12345678<?php$str1='i love china';$str2='I lovE Web';echo'str1='.$str1.'<p>';echo'str2='.$str2.'<p>';echo'strncmp(str1,str2,6)比较结果:'.strncmp($str1,$str2,6).'<p>';echo'strncasecmp(str1,str2,6)比较结果:'.strncasecmp($str1,$str2,6).'<p>';?>

运行结果:

str1=i love china

str2=I lovE Web

strncmp(str1,str2,6)比较结果:1

strncasecmp(str1,str2,6)比较结果:0


⑥检测字符串

1>检索字符串中指定的关键字,获取一个字符串在另一个字符串中首次出现到后者末尾的子字符串,如果匹配成功返回剩余字符串,匹配不成功返回false。

【1】strstr()函数:区分大小写。

定义和用法

strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。

该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。

语法

strstr(string,search)
参数描述
string必需。规定被搜索的字符串。
search必需。规定所搜索的字符串。如果该参数是数字,则搜索匹配数字 ASCII 值的字符。

提示和注释

注释:该函数是二进制安全的。

注释:该函数对大小写敏感。如需进行大小写不敏感的搜索,请使用 stristr()。


【2】stristr()函数:不区分大小写,具体方法和strstr()函数类似。


2>检索字符串出现的次数:一把用于搜索引擎中。

substr_count():

语法

substr_count(string,substring,start,length)
参数描述
string必需。规定要检查的字符串。
substring必需。规定要检索的字符串。
start可选。规定在字符串中何处开始搜索。
length可选。规定搜索的长度。
1234<?php    $str='测试单词的出现的次数,为了配合测试,多写几个词,这是第三次出现词这个单词,好吧,第四次了。';    echo '\'词\'出现的次数是:'.substr_count($str,'词');?>

运行结果:

'词'出现的次数是:4


⑦替换字符串

1>用一个字符串替换原字符串的另一些字符,最常用的就是搜索引擎的关键字处理,如关键字描红(适用于模糊查询)等。

【1】str_replace()函数:区分大小写

str_replace(find,replace,string,count)
参数描述
find必需。规定要查找的值。
replace必需。规定替换 find 中的值的值。
string必需。规定被搜索的字符串。
count可选。一个变量,对替换数进行计数。

提示和注释

注释:该函数对大小写敏感。请使用 str_ireplace() 执行对大小写不敏感的搜索。

注释:该函数是二进制安全的。


【2】str_ireplace()函数:不区分大小写,具体用法类似str_replace()函数。


<body>    <?php        $str1='周杰伦J-->1-->周杰伦J-->2-->周杰伦j-->3-->周杰伦j-->4-->周杰伦J';        $str2='周杰伦j';        $str3="<font color='#FF0000'>Jay</font>";        $num=0;        echo '原字符串:'.$str1.'<p>';        echo '检测字符:'.$str2.'<p>';        echo '替换字符:'.$str3.'<p>';        echo 'str_replace($str2,$str3,$str1)执行结果:'.str_replace($str2,$str3,$str1).'<p>';        echo 'str_ireplace($str2,$str3,$str1)执行结果:'.str_ireplace($str2,$str3,$str1).'<p>';        echo 'str_replace($str2,$str3,$str1,$num)执行结果:'.str_replace($str2,$str3,$str1,$num).'<p>';        echo 'str_replace($str2,$str3,$str1,$num)替换的个数是:'.$num;    ?></body>

运行结果:

原字符串:周杰伦J-->1-->周杰伦J-->2-->周杰伦j-->3-->周杰伦j-->4-->周杰伦J

检测字符:周杰伦j

替换字符:Jay

str_replace($str2,$str3,$str1)执行结果:周杰伦J-->1-->周杰伦J-->2-->Jay-->3-->Jay-->4-->周杰伦J

str_ireplace($str2,$str3,$str1)执行结果:Jay-->1-->Jay-->2-->Jay-->3-->Jay-->4-->Jay

str_replace($str2,$str3,$str1,$num)执行结果:周杰伦J-->1-->周杰伦J-->2-->Jay-->3-->Jay-->4-->周杰伦J

str_replace($str2,$str3,$str1,$num)替换的个数是:2


2>对指定字符串中的部分字符进行替换:substr_replace()函数

定义和用法

substr_replace() 函数把字符串的一部分替换为另一个字符串。

语法

substr_replace(string,replacement,start,length)
参数描述
string必需。规定要检查的字符串。
replacement必需。规定要插入的字符串。
start

必需。规定在字符串的何处开始替换。

  • 正数 - 在第 start 个偏移量开始替换

  • 负数 - 在从字符串结尾的第 start 个偏移量开始替换

  • 0 - 在字符串中的第一个字符处开始替换

charlist

可选。规定要替换多少个字符。

  • 正数 - 被替换的字符串长度

  • 负数 - 从字符串末端开始的被替换字符数

  • 0 - 插入而非替换

提示和注释

注释:如果 start 是负数且 length 小于等于 start,则 length 为 0



<body>    <?php        $str='test the substr_replace()';        $str1='hehe';        echo '原字符串:'.$str.'<p>';        echo 'substr($str,$str1,0,4)替换后的字符串:'.substr_replace($str,$str1,0,4).'<p>';    ?></body>

运行结果:

原字符串:test the substr_replace()

substr($str,$str1,0,4)替换后的字符串:hehe the substr_replace()


⑧格式化字符串

1>字符串的格式化

2>数字的格式化(最常用)

number_format()函数:

定义和用法

number_format() 函数通过千位分组来格式化数字。

语法

number_format(number,decimals,decimalpoint,separator)
参数描述
number

必需。要格式化的数字。

如果未设置其他参数,则数字会被格式化为不带小数点且以逗号 (,) 作为分隔符。

decimals可选。规定多少个小数。如果设置了该参数,则使用点号 (.) 作为小数点来格式化数字。
decimalpoint可选。规定用作小数点的字符串。
separator

可选。规定用作千位分隔符的字符串。

仅使用该参数的第一个字符。比如 "xyz" 仅输出 "x"。

注释:如果设置了该参数,那么所有其他参数都是必需的。

提示和注释

注释:该函数支持一个、两个或四个参数(不是三个)


<body>    <?php        $str='123.633';        echo 'str='.$str.'<p>';        echo 'number_format($str)='.number_format($str).'<p>';        echo 'number_format($str,2)='.number_format($str,2).'<p>';        $str1='111222333.444555';        echo 'str1='.$str1.'<p>';        echo 'number_format($str1,2,\'*\',\'_\')='.number_format($str1,2,'*','_').'<p>';    ?></body>

运行结果:

str=123.633

//注意,这里是124,格式化时四舍五入。

number_format($str)=124

number_format($str,2)=123.63

str1=111222333.444555

number_format($str1,2,'*','_')=111_222_333*44


⑨分割字符串:

explode():按照指定的规则对一个字符串进行分割,返回值是一个数组。

注意:数组下标从0开始

定义和用法

explode() 函数把字符串分割为数组。

语法

explode(separator,string,limit)
参数描述
separator必需。规定在哪里分割字符串。
string必需。要分割的字符串。
limit可选。规定所返回的数组元素的最大数目。

说明

本函数返回由字符串组成的数组,其中的每个元素都是由 separator 作为边界点分割出来的子字符串。

separator 参数不能是空字符串。如果 separator 为空字符串(""),explode() 将返回 FALSE。如果 separator 所包含的值在 string 中找不到,那么 explode() 将返回包含 string 中单个元素的数组。

如果设置了 limit 参数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。

如果 limit 参数是负数,则返回除了最后的 -limit 个元素外的所有元素。此特性是 PHP 5.1.0 中新增的。

提示和注释

注释:参数 limit 是在 PHP 4.0.1 中加入的。

注释:由于历史原因,虽然 implode() 可以接收两种参数顺序,但是 explode() 不行。你必须保证 separator 参数在string 参数之前才行


<body>    <?php        $str='01@12@23@34@45@56@67@78@89';        $str_array=explode('@',$str);        echo '第一种输出方法print_r($str_array)<p>';        print_r($str_array);        echo '<p>';        echo '第二种输出方法echo $str_array[]<p>';        for($i=0;$i<10;$i++){            echo $str_array[$i].' ';        }    ?></body>

运行结果:

第一种输出方法print_r($str_array)

Array ( [0] => 01 [1] => 12 [2] => 23 [3] => 34 [4] => 45 [5] => 56 [6] => 67 [7] => 78 [8] => 89 )

第二种输出方法echo $str_array[]

01 12 23 34 45 56 67 78 89


⑩合并字符串

implode()函数:将数组合并为一个字符串。

定义和用法

implode() 函数把数组元素组合为一个字符串。

语法

implode(separator,array)
参数描述
separator可选。规定数组元素之间放置的内容。默认是 ""(空字符串)。
array必需。要结合为字符串的数组。

说明

虽然 separator 参数是可选的。但是为了向后兼容,推荐您使用使用两个参数。

提示和注释

注释:implode() 可以接收两种参数顺序。但是由于历史原因,explode() 是不行的。你必须保证 separator 参数在string 参数之前才行。


<body>    <?php        $str='01@12@23@34@45@56@67@78@89';        $str_array=explode('@',$str);        $str_array_new=implode('@',$str_array);        echo '合并后的字符串:'.$str_array_new;    ?></body>

运行结果:

合并后的字符串:01@12@23@34@45@56@67@78@89

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消