第8章 字符串处理

学习要点:

1.字符串格式化

2.操作子字符串

3.字符串比较

4.查找替换字符串

5.处理中文字符

在每天的编程工作中,处理、调整以至最后控制字符串是很重要的一部分,一般也认为这是所有编程语言的基础。不同与其他语言,PHP没有那么麻烦地使用数据类型来处理字符串。这样一来,PHP中的字符串处理就再容易不过了。

一.字符串格式化

整理字符串的第一步是清理字符串中多余的空格。虽然这一部操作不是必需的,但如果要将字符串存入一个文件或数据库中,或者将它和别的字符串进行比较,这就是非常有用的。

chop()函数移除字符串后面多余的空白,包括新行。

ltrim()函数移除字符串起始处多余空白。

rtrim()函数移除字符串后面多余的空白,包括新行,此函数是chop()的别名。

trim()函数移除字符串两边多余的空白。

<?php

echo trim('              PHP           ');

?>

PHP具有一系列可供使用的函数来重新格式化字符串,这些函数的工作方式是各不相同的。

nl2br()函数将字符串作为输入参数,用XHTML中的<br />标记代替字符串中的换行符。

<?php

echo nl2br("This is a Teacher!\nThis is a Student!");

?>

将特殊字符转换为HTML等价形式,可以使用htmlentities()和htmlspecialchars函数。如果想要去掉字符串中的HTML去掉,可以使用strip_tags()函数

<?php

echo htmlentities('<strong>我是吴祁!</strong>');  //转换所有字符

echo htmlspecialchars('<strong>我是吴祁!</strong>')  //转换特殊字符

echo strip_tags('<strong>我是吴祁!</strong>')  //去掉了<strong>

?>

对于字符串来说,某些字符肯定是有效的,但是当将数据插入到数据库中的时候可能会引起一些问题,因为数据库会将这些字符解释成控制符。这些有问题的字符就是引号(单引号和双引)、反斜杠(\)和NULL字符。

PHP提供了两个专门用于转义字符串的函数。在将任何字符串写到数据库之前,应该使用addslashes()将它们重新格式化,

在调用了addslashes()后,所有的引号都加了斜杠,而stripslashes()函数去掉了这些斜杠。

<?php

echo addslashes('This is \a" Teacher! ');

?>

可以重新格式化字符串中的字母大小写。

strtoupper()函数将字符串转换为大写

strtolower()函数将字符串转换成小写

ucfirst()函数将第一个字母转换为大写

ucwords()函数将每个单词第一个字母转换为大写

<?php

echo strtoupper('yc60.com@gmail.com');

?>

填充字符串函数:str_pad()将字符串用指定个数的字符填充字符串。

<?php

echo str_pad('Salad',10).'is good.';

?>

二.操作子字符串

通常,我们想查看字符串的各个部分。例如,查看句子中的单词,或者将一个域名或电子邮件地址分割成一个个的组件部分。PHP提供了几个字符串函数来实现此功能。

使用函数explode()、implode()和join()

为了实现这个功能,我们将使用的第一个函数是explode()。

使用implode()或join()函数来实现与函数explode()相反的效果,这两个函数的效果是一致的。

<?php

$email = 'yc60.com@gmail.com';

$email_array  = explode('@',$email);

?>

使用strtok()函数

strtok()函数一次只从字符串取出一些片段(称为令牌)。对于一次从字符串中取出一个单词的处理来说,strtok()函数比explode()函数的效果更好。

<?php

$str = "I,will.be#back";

$tok = strtok($str,",.#");

while($tok) {

echo "$tok<br \>";

$tok = strtok(",.#");

}

?>

使用substr()函数

函数substr()允许我们访问一个字符串给定起点和终点的子字符串。这个函数并不适用于我们的例子中,但是,当需要得到某个固定格式字符串中的一部分时,它会非常有用。

<?php

echo substr("abcdef", 1, 3);

?>

分解字符串:str_split()返回一个数组,其中各数组元素分别是字符串参数中的一个字符串。

<?php

print_r(str_split('This is a Teacher!'));

?>

逆置字符串:strrev()可以将一个字符串逆反过来。

<?php

echo strrev('This is a Teacher!');

?>

三.字符串比较

到目前为止,我们已经用过"= ="号来比较两个字符串是否相等。使用PHP可以进行一些更复杂的比较。这些比较分为两类:部分匹配和其他情况。

字符串的排序:strcmp()、strcasecmp()和strnatcmp()

该函数需要两个进行比较的参数字符串。如果这两个字符串相等,该函数返回0,如果按字典顺序str1和str2后面(大于str2)就返回一个正数,如果str1小于str2就返回一个负数。这个函数是区分大小写的。

函数strcasecmp()除了不区分大小写之外,其他和strcmp()一样。

函数strnatcmp()及与之对应的不区分大小写的strnatcasecmp()函数是在PHP4中新增的。这两个函数按“自然排序”比较字符串,所谓自然排序是按人们习惯的顺序进行排序。

<?php

echo strcmp('a','b');

?>

使用strspn()函数返回一个字符串中包含有另一个字符串中字符的第一部分的长度。也就是求两个字符串之间相同的部分。

<?php

echo strspn('gmail','yc60.com@gmail.com');

?>

使用strlen()函数测试字符串的长度

可以使用函数strlen()来检查字符串的长度。如果传给它一个字符串,这个函数将返回字符串的长度。例如, strlen("hello")将返回5.

<?php

echo strlen('This is a Teacher!');

?>

确定字符串出现的频率:substr_count()返回一个字符串在另一个字符串中出现的次数。

<?php

echo substr_count('yc60.com@gmail.com','c');

?>

四.查找替换字符串

通常,我们需要检查一个更长的字符串中是否含有一个特定的子字符串。这种部分匹配通常比测试字符串的完全等价更有用处。

在字符串中查找字符串:strstr()、strchr()、strrchr()和stristr()

函数strstr()是最常见的,它可以用于在一个较长的字符串专供查找匹配的字符串或字符。请注意,函数strchr()和strstr()完全一样。

<?php

echo strstr('yc60.com@gmail.com','@');

?>

函数strstr()有两个变体。第一个变体是stristr(),它几乎和strstr()一样,其区别在于不区分字符大小。对于我们的只能表单应用程序来说,这个函数非常有用,因为用户可以输入"delivery"、"Delivery"和"DELIVERY"。

第二个变体是strrchr(),它也几乎和strstr()一样,只不过是strstr()的别名。

查找字符串的位置:strpos()、strrpos()。

函数strpos()和strrpos()的操作和strstr()类似,但它不是返回一个子字符串,而返回子字符串needle在字符串haystack中的位置。更有趣的是,现在的PHP手册建议使用strpos()函数代替strstr()函数来查看一个子字符串在一个字符串中出现的位置,因为前者的运行速度更快。

<?php

echo strrpos('yc60.com@gmail.com','c');

?>

替换字符串:str_replace()、str_ireplace()、substr_replace()

<?php

echo str_replace('@','#','yc60.com@gmail.com');

echo substr_replace('yc60.com@gmail.com','###',0,5);

?>

五. 处理中文字符

对于以上的字符串函数,有些可以用于中文,但有些却不适用中文。所以,PHP提供了专门的函数来解决这样的问题。

中文字符可以是gbk,utf8,gb2312

mb_strlen() 对应的函数为 strlen()  求字符串的长度

mb_strstr()  对应的函数为 strstr()  求某字符串到结尾的字符

mb_strpos() 对应的函数为 strpos()  求出字符最先出现处

mb_substr() 对应的函数为 substr()  取出指定的字符串

mb_substr_count() 对应函数为 substr_str() 返回字符串出现的次数

最后扫一遍手册

PHP - 字符串操作的更多相关文章

  1. python学习笔记(字符串操作、字典操作、三级菜单实例)

    字符串操作 name = "alex" print(name.capitalize()) #首字母大写 name = "my name is alex" pri ...

  2. shell编程常用的截取字符串操作

    1.          常用的字符串操作 1.1.           替换字符串:$ echo ${var/ /_}#支持正怎表达式 / /表示搜索到第一个替换,// /表示搜索到的结果全部替换. ...

  3. php字符串操作集锦

    web操作, 主要就是对字符文本信息进行处理, 所以, 字符串操作几乎占了很大一部分的php操作.包括 注意strstr 和 strtr的区别? 前者表示字符串查找返回字符串,后者表示字符串中字符替换 ...

  4. java 字符串操作和日期操作

    一.字符串操作 创建字符串 String s2 = new String("Hello World"); String s1 = "Hello World"; ...

  5. [No000078]Python3 字符串操作

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- '''Python 字符串操作 string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分 ...

  6. Python 字符串操作及string模块使用

    python的字符串操作通过2部分的方法函数基本上就可以解决所有的字符串操作需求: python的字符串属性函数 python的string模块 1.字符串属性方法操作: 1.>字符串格式输出对 ...

  7. C语言字符串操作总结大全

    1)字符串操作 strcpy(p, p1)  复制字符串  函数原型strncpy(p, p1, n)   复制指定长度字符串  函数原型strcat(p, p1)   附加字符串  函数原型strn ...

  8. c# 字符串操作

    一.字符串操作 //字符串转数组 string mystring="this is a string" char[] mychars=mystring.ToCharArray(); ...

  9. C语言字符串操作总结大全(超详细)

    本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作  strcpy(p, p1) 复制字符串  strncpy(p, p1, n) 复制指定长度字符串  strcat( ...

  10. JavaScript中常见的字符串操作函数及用法

    JavaScript中常见的字符串操作函数及用法 最近几次参加前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等.如果你经常参加笔试或者也是一个过来人,相信 ...

随机推荐

  1. linux ln 命令(转载)

    ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln –s 源文件 目标文件. 当我们需要在不同的目录,用到相同的 ...

  2. CentOS6.5安装MySQL5.7详细教程

    注:文中所写的安装过程均在CentOS6.5 x86下通过测试 主要参考博文: https://segmentfault.com/a/1190000003049498 http://www.th7.c ...

  3. 啊上班的二号i将诶

    http://www.huihui.cn/share/8112372 http://www.huihui.cn/share/8112363 http://www.huihui.cn/share/811 ...

  4. HDU2084:数塔(DP)

    Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大 ...

  5. JavaEE Tutorials (6) - 使用嵌入式企业bean容器

    6.1嵌入式企业bean容器概述826.2开发嵌入式企业bean应用82 6.2.1运行嵌入式应用83 6.2.2创建企业bean容器83 6.2.3查找会话bean引用84 6.2.4关闭企业bea ...

  6. 颜色空间RGB与HSV(HSL)的转换

    一般的3D编程只需要使用RGB颜色空间就好了,但其实美术人员更多的是使用HSV(HSL),因为可以方便的调整饱和度和亮度. 有时候美术需要程序帮助调整饱和度来达到特定风格的渲染效果,这时候就需要转换颜 ...

  7. hadoop源代码解读namenode高可靠:HA;web方式查看namenode下信息;dfs/data决定datanode存储位置

    点击browserFilesystem,和命令查看结果一样 当我们查看hadoop源代码时,我们看到hdfs下的hdfs-default.xml文件信息 我们查找${hadoop.tmp.dir}这是 ...

  8. BZOJ 2242: [SDOI2011]计算器( 快速幂 + 扩展欧几里德 + BSGS )

    没什么好说的... --------------------------------------------------------------------- #include<cstdio&g ...

  9. 面向对象程序设计-C++ Type conversion (Static) & Inheritance & Composition【第十二次上课笔记】

    这节课继续讲解了 static 作为静态数据成员 / 成员函数的用法 具体详解我都已注释出来了,大家可以慢慢看 有任何问题都可以在这篇文章下留言我会及时解答 :) //static 静态数据成员 // ...

  10. (Problem 1)Multiples of 3 and 5

    If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The ...