PHP中常用的字符串格式化函数总结


Posted in PHP onNovember 19, 2014

字符串的格式化就是将字符串处理为某种特定的格式。通常用户从表单中提交给服务器的数据都是字符串的形式,为了达到期望的输出效果,就需要按照一定的格式处理这些字符串后再去使用。经常见到的字符串格式化函数如下图所示:

PHP中常用的字符串格式化函数总结

注意:在PHP中提供的字符串函数处理的字符串,大部分都不是在原字符串上修改,而是返回一个格式化后的新字符串。

一、取出空格和字符串填补函数

空格也是一个有效的字符,在字符串中也会占据一个位置。用户在表单输入数据时,经常在无意中会多输入一些无意义的空格。因此PHP脚本在接收到通过表单处理过来的数据时,首先处理的就是字符串中多余的空格,或者其他一些没有意义的符号。在PHP中可以通过ltrim()、rtrim()和trim()函数来完成这项工作。这三个函数的语法格式相同,但作用有所不同。他们的语法格式如下所示:

string ltrim(string str[,string charlist])                //从字符串左侧删除空格或其他预定义字符

string rtrim(string str[,string charlist])              //从字符串右侧删除空白字符或其他预定义字符

string trim(string str[,string charlist])              //从字符串的两端删除空白字符或其他预定义字符

这三个函数分别用于从字符串的左、右和两端删除空白字符或其他预定义字符。处理后的结果都会以新字符串的形式返回,不会在原字符串上修改。其中第一个参数str是待处理的字符串,为必选项。第二个参数charlist是过滤字符串,用于指定希望去除的特殊符号,该参数为可选。如果不指定过滤字符串,默认情况下会去掉下列字符。

★”":空格
★”0\”:NULL
★”\t”:制表符
★”\n”:新行
★”\r”:回车

此外还可以使用“..”符号指定需要去除的一个范围,例如“0..9”或“a..z”表示去掉ASCII码值中的数字和小字母。它们的使用代码如下所示:

<?php

$str = "123 This is a test ..."; //声明一个测试字符串,左侧为数字开头,右侧为省略号

echo ltrim($str,"0..9"); //过滤掉字符串左侧的数字,输出This is a test ...

echo rtrim($str,".") //过滤掉字符串右侧的所有“.”,输出:123 This is a test

echo trim($str,"0..9 A..Z ."); //过滤掉字符串两端的数字和大写字母还有“.”,输出:his is a test

?>

不仅可以按需求过滤掉字符串中的内容,还可以使用str_pad()函数按需求对字符串进行填补。可以用于对一些敏感信息的保护,例如数据的对并排列等。其函数的原型如下所示:

string str_pad(string input,int pad_length[,string pad_string[,int pad_type]])

该函数有4个参数,第一个参数指明要处理的字符串。第二个参数给定处理后字符串的长度,如果该值小于原始字符串的长度,则不进行任何操作。第三个参数指定填补时所用的字符串,它为可选参数,如果没有指定则默认使用空格填补。最后一个参数指定填补的方向,它有三个可选值:STR_PAD_BOTH、STR_PAD_LEFT和STR_PAD_RIGHT,分别代表在字符串两端、左和右进行填补。也是一个可选参数,如果没有指定,则默认值是STR_PAD_RIGHT。函数str_pad()的使用代码如下所示:
<?php

$str = "LAMP";

echo str_pad($str,10);         //指定长度为10,默认使用空格在右边填补“LAMP”

echo str_pad($str,10,"-="STR_PAD_LEFT);     //指定长度为10,指定在左边填补“-=-=-=LAMP”

echo str_pad($str,10,"_"STR_PAD_BOTH);     //指定长度为10,指定在左边填补“___LAMP___”

?>

二、字符串大小写的转换

在PHP中提供了4个字符串大小写的转换函数,它们都只有一个可选参数,即传入要进行转换的字符串。可以直接使用这些函数完成大小写转换的操作。函数strtoupper()用于将给定的字符串全部转换为大写字母;函数strtolower()用于将给定的字符串全部转换为小写字母;函数ucfirst()用于将给定的字符串中的首字母转换为大写,其余字符不变;函数ucwords()用于将给定的字符串中全部以空格分割的单词首字母转换为大写。下面的程序是这些函数的使用代码,如下所示:

<?php

$lamp = "lamp is composed of Linux 、Apache、MySQL and PHP";

echo strtolower($lamp); //输出:lamp is composed of linux、apache、mysql and php

echo strtoupper($lamp); //输出:LAMP IS CONPOSED OF LINUX、APACHE、MYSQL AND PHP

echo ucfirst($lamp); //输出:Lamp is composed of Linux 、Apache、MySQL and PHP

echo ucwords($lamp); //输出: Lamp Is Composed Of Linux 、Apache、MySQL And PHP

?>

这些函数只是按照他们说明描述的方式工作,要想确保一个字符串的首字母是大写字母,而其余的都是小写字母,就需要使用符合的方式。如下所示:
<?php

$lamp = "lamp is composed of Linux 、Apache、MySQL and PHP";

echo ucfirst(strtolower($lamp)); //输出:Lamp is composed of linux、apache、mysql and php

?>

三、和HTML标签相关的字符串格式化

HTML的输入表单和URL上附加资源是用户将数据提交给服务器的途径,如果不能很好地处理,就有可能成为黑客攻击服务器的入口。例如,用户在发布文章时,在文章中如果包含一些HTML格式标记或JavaScript的页面转向等代码了,直接输出显示则一定会使用页面的布局发生改变。因为这些代码被发送到浏览器中,浏览器会按有效的代码去解释。所以在PHP脚本中,对用户提交的数据内容一定要先处理。在PHP中为我们提供了非常全面的HTML相关的字符串格式化函数,可以有效地控制HTML文本的输出。

①函数nl2br()

在浏览器中输出的字符串“<br>”标记换行,而很多人习惯使用“\n”作为换行符号,但浏览器中不识别这个字符串的换行符。即使有多行文本,在浏览器中显示时也只有这一行。nl2br()函数就是在字符串中的每个新行“\n”之前插入HTML换行符“<br/>”。该函数的使用如下所示:

<?php

echo nl2br("One line.\nAnother line."); //在“\n”前加上“<br/>”标记

/*输出以下两行结果

One line.<br/>

Another line.

*/

?>

②函数htmlspecialchars()

如果不希望浏览器直接解析HTML标记,就需要将HTML标记中的特殊字符转换成HTML实体。例如,将“<”转换为“<”,将“>”转换为“>”。这样HTML标记浏览器就不会去解析,而是将HTML文本在浏览器中原样输出。PHP中提供的htmlspecialchars()函数就可以将一些预定义的字符串转换为HTML实体。此函数用在预防使用者提供的文字中包含了HTML的标记,像是布告栏或是访客留言板这方面的应用。以下是该函数可以转换的字符:

★“&”(和号)转换为“&”。
★“””(双引号)转换为“"”。
★“'”(单引号)转换为“'”。
★“<”(小于)转换为“<”。
★“>”(大于)转换为“>”。

该函数的原型如下:

string htmlspecialchars(string string [,int quote_style[,string charset]])

该函数中第一个参数是带有HTML标记待处理的字符串。第二个参数用来决定引号的转换方式。默认值为ENT_COMPAT将只转换双引号,而保留单引号;ENT_QUOTES将同时转换这两种引号;而ENT_NOQUOTES将不对引号进行转换。第三个参数用于指定所处理字符串的字符集,默认的字符集是“ISO88511-1”。
<html>

<body>

<?php

$str = "<B>WebServer:</B> & 'Linux' & 'Apache'"; //将有HTML标记和单引号的字符串

echo htmlspecialchars($str,ENT_COMPAT); //转换HTML标记和转换双引号

echo "<br>\n";

echo htmlspecialchars($str,ENT_QUOTES); //转换HTML标记和转换两种引号

echo "<br>\n";

echo htmlspecialchars($str,ENT_NOQUOTES); //转换HTML标记和不对引号转换

echo "<br>\n";

?>

</body>

</html>

在浏览器中的输出结果

<B>WebServer:</B> & ‘Linux' & ‘Apache'

<B>WebServer:</B> & ‘Linux' & ‘Apache'

<B>WebServer:</B> & ‘Linux' & ‘Apache'

如果在浏览器中查看源代码,会看到如下结果:
<html>

<body>

<B>WebServer:</B>&'Linux'&'Apache'<br> //没有转换单引号

<B>WebServer:</B>&'Linux'&'Apache'<br>

<B>WebServer:</B>&'Linux'&'Apache' //没有转换单引号

</body>

</html>

在PHP中还提供了htmlentities()函数,可以将所有的非ASCII码字符转换为对应的实体代码。该函数与htmlspecialchars()函数的使用语法格式一致,该函数可以转义更多的HTML字符。下面的代码为htmlentities()函数的使用范例:

<?php

$str = "一个'quote'是<b>bold</b>";

//输出&0qrave;»¸ö 'quote' ÊÇ <b> <:b>bold</b>

echo htmlentities($str);

//输出:一个'quote' 是 <b>bold</b>

echo htmlentities($str,ENT_QUOTES,gb2312);

?>

在处理表单中提交的数据时,不仅要通过前面介绍的函数将HTML的标记符号和一些特殊字符转换为HTML实体,还需要对引号进行处理。因为被提交的表单数据中的“'”、“””和“\”等字符前将自动加上一个斜线“\”。这是由于PHP配置文件php.ini中的选项magic_quotes_gpc在起作用,默认是打开的,如果不关闭它则要使用函数stripslashes()删除反斜线。如果不处理,将数据保存到数据库中时,有可能会被数据库误当成控制符号而引起错误。函数stripslashes()只有一个被处理字符串作为参数,返回处理后的字符串。通常使用htmlspecialchars()函数与stripslashes()函数复合的方式,联合处理表单中提交的数据。

函数stripslashes()的功能是去掉反斜线“\”,如果有连续两个反斜线,则只去掉一个。与之对应的是另一个函数addslashes(),正如函数名所暗示的,它将在“'”、“””、“\”和NULL字符等前增加必要的反斜线。

函数htmlspecialchars()是将函数HTML中的标记符号转换为对应的HTML实体,有时直接删除用户输入的HTML标签,也是非常有必要的。PHP中提供的strip_tags()函数默认就可以删除字符串中所有的HTML标签,也可以有选择性地删除一些HTML标记。如布告栏或是访客留言板,有这方面的应用是相当必要的。例如用户在论坛中发布文章时,可以预留一些可以改变字体大小、颜色、粗体和斜体等的HTML标记,而删除一些对页面布局有影响的HTML标记。函数strip_tags()的原型如下所示:

string strip_tags(string str[,string allowable_tags]); //删除HTML的标签函数

该函数有两个参数,第一个参数提供了要处理的字符串,第二个参数是一个可选的HTML标签列表,放入该列表中的HTML标签将被保留,其他的则全部被删除。默认将所有HTML标签都删除。下面的程序为该函数的使用范围,如下所示:
<?php

$str = "<font color='red' size=7>Linux</font> <i>Apache</i> <u>Mysql</u> <b>PHP</b>";

echo strip_tags($str); //删除了全部HTML标签,输出:Linux Apache Mysql PHP

echo strip_tags($str,"<font>"); //输出<font color='red' size=7>Linux</font>Apache Mysql PHP

echo strip_tags($str,"<b><u><i>"); //输出Linux <i>Apache</i> <u>Mysql</u> <b>PHP</b>

?>

四、其他字符串格式化函数

字符串的格式化处理函数还有很多,只要是想得到所需要格式化的字符串,都可以调用PHP中提供的系统函数处理,很少需要自己定义字符串格式化函数。

①函数strrev()

该函数的作用是将输入的字符串反转,只提供一个要处理的字符串作为参数,返回翻转后的字符串。如下所示:

<?php

echo strrev("http://www.lampbrother.net"); //反转后输出:ten.rehtorbpmal.www//:ptth

?>

②函数number_format()

number_format()函数通过千位分组来格式化数字。该函数如下所示:

string number_format(float number[,int decimals[,string dec_point,string thousands_sep]])
<?php

$number = 123456789;

echo number_format($number);      //输出:123,456,789千位分隔的字符串

echo number_format($number,2);       //输出:123,456,789.00小数点后保留两位小数

echo number_format($number,2,",",".");       //输出123.456.789,00千位使用(.)分隔了,并保留两位小数

?>

③函数md5()

随着互联网的普及,黑客攻击已成为网络管理者的心病。有统计数据表明70%的攻击来自内部,因此必须采取相应的防范措施来扼制系统内部的攻击。防止内部攻击的重要性还在于内部人员对数据的存储位置、信息重要性非常了解,这使得内部攻击更容易奏效。攻击者盗用合法用户的身份信息,以仿冒的身份与他人进行通信。所以在用户注册时应该先将密码加密后再添加到数据库中,这样就可以防止内部攻击者直接查询数据库中的授权表,盗用合法用户的身份信息。

md5()函数的作用就是将一个字符串进行MD5算法加密,默认返回一个32位的十六进制字符串。

<?php

$password = "lampbrother";

echo md5($password)."<br>";

 

//将输入的密码和数据库保存的匹配

if(md5($password) == '5f1ba7d4b4bf96fb8e7ae52fc6297aee'){

echo "密码一致,登录成功";

}

?>

在PHP中提供了一个对文件进行MD5加密的函数md5_file(),使用的方式和md5()函数相似。

PHP 相关文章推荐
解决GD中文乱码问题
Feb 14 PHP
PHP和XSS跨站攻击的防范
Apr 17 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
用PHP读取和编写XML DOM的实现代码
Feb 03 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
Jul 23 PHP
PHP中生成UUID自定义函数分享
Jun 10 PHP
php日期操作技巧小结
Jun 25 PHP
PHP入门教程之面向对象基本概念实例分析
Sep 11 PHP
PHP中静态变量的使用方法实例分析
Dec 01 PHP
php如何修改SESSION的生存存储时间的实例代码
Jul 05 PHP
Laravel中的Auth模块详解
Aug 17 PHP
php获取手机端的号码以及ip地址实例代码
Sep 12 PHP
php管理nginx虚拟主机shell脚本实例
Nov 19 #PHP
PHP 读取和编写 XML
Nov 19 #PHP
PHP生成不重复随机数的方法汇总
Nov 19 #PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
Nov 19 #PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
Nov 19 #PHP
PHP中使用数组指针函数操作数组示例
Nov 19 #PHP
PHP循环遍历数组的3种方法list()、each()和while总结
Nov 19 #PHP
You might like
用PHP产生动态的影像图
2006/10/09 PHP
php zend 相对路径问题
2009/01/12 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
php-app开发接口加密详解
2018/04/18 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
js 创建书签小工具之理论
2011/02/25 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
引用外部js乱码问题分析及解决方案
2013/04/12 Javascript
js跨浏览器实现将字符串转化为xml对象的方法
2013/09/25 Javascript
Jquery对select的增、删、改、查操作
2015/02/06 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
React key值的作用和使用详解
2018/08/23 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
2020/09/10 Javascript
[06:07]刀塔密之二:攻之吾命受之吾幸
2014/07/03 DOTA
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
Python的randrange()方法使用教程
2015/05/15 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
总结python实现父类调用两种方法的不同
2017/01/15 Python
python使用magic模块进行文件类型识别方法
2018/12/08 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
2019/07/03 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
python3 简单实现组合设计模式
2020/07/02 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
python 偷懒技巧——使用 keyboard 录制键盘事件
2020/09/21 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
2021/01/08 Python
市场营销策划方案
2014/06/11 职场文书
2015年母亲节寄语
2015/03/23 职场文书
高中班长竞选稿
2015/11/20 职场文书
纯CSS3实现div按照顺序出入效果
2021/07/15 HTML / CSS
关于Python中进度条的六个实用技巧分享
2022/04/05 Python