字符串相关处理函数
1.单引号和多引号的区别
(1)单引号:在单引号引起来的字符串中不能再包含单引号,即单引号不能嵌套使用。如果有必要在单引号中表示一个单引号的话,需要用反斜线(\)转义。另外,单引号字符串中出现的变量不会被变量的值替代。
echo 'this \n is \r a \t simple string \\'; //只能讲最后的反斜杠转义输出一个反斜杠,其他的转义都是无效的,会原样输出
$str = 100;
echo 'this is a simple $str string'; //会将变量$stri原样输出,并不会在单引号中解析这个变量
在定义简单字符串时,使用单引号效率会更高。
(2)双引号:转移字符“\”与其他字符合起来表示一个特殊字符,通常是一些非打印字符(如:\n),如果视图转义其他字符,反斜线本身也会被显示出来。另外,双引号字符串中出现的变量会被变量值替代,即可以解析双引号中的变量。
$beer = 'Heineken';
echo "$beer's taste is great"; //可以将变量$beer解析,因为(')在变量名中是无效的.
echo "He drank some $beers"; //不可以解析变量$beers,因为“s”在变量名中是有效的,没有$beers这个变量
echo "He drank some ${beer}s"; //使用{}包含起来,就可以将变量分离出来解析了
echo "He drank some {$beer}s"; //可以将变量解析,{}的另一种用法
2.常用的字符串输出函数
2.1 echo()
该函数用于输出一个或多个字符串,echo()实际上不是一个函数(它是个语言结构),因此无须对其使用括号。如果向echo()传递一个或多个参数时,不能使用括号。
$str = "What's LAMP?";
echo $str; //直接输出字符串变量不能加括号
echo 'This','string','was','made','width multiple parameters<br>'; //可以输出用逗号隔开的多个参数
2.2 printf()
该函数的功能和echo()的一样,它有返回值,若成功返回1,失败则返回0.但它的执行效率没有echo()函数高
2.3 die()
该函数是exit()函数的别名。如果参数是一个字符串,则该函数会在退出前输出它。如果参数是一个整数,这个值会被用作退出状态。退出状态的值在0至254之间。退出状态255由PHP保留,不会被使用。状态0用于成功地终止程序。
$url = "http://www.brophp.net";
fopen($url,"r") or die("Unable to connect to $url"); //如果打开失败则输出一条消息并退出程序
2.4 printf()
格式:printf(format,arg1,arg2....argn)
该函数用于输出格式化的字符串,第一个参数为必选项,是规定的字符串及如何格式其中的变量。还可以有多个可选参数,是规定插到第一个参数的格式化字符串对应%符号处的参数。第一个参数中使用的转换格式,是以百分比符号("%")开始到转换字符结束(如:%d,表示带符号的十进制数,语法同C语言)。后面的多个参数将插入到主字符串中的百分号(%)符号处。该函数是逐步执行的。在第一个%符号中插入arg1,在第二个%符号处插入arg2,以此类推。如果%符号多于arg参数,则必须使用占位符。占位符被插入到%符号之后,有数字和"\$"组成。
$str = "LAMP";
$num = 798;
printf("%s book.page number %u <br>",$str,$num); //将字符串$str在第一个参数中的%出输出,按%s的字符串输出,整型$num按%u输出
2.5 sprintf()
该函数的用法和prinf()相似,但它并不是输出字符串,而是把格式化的字符串以返回值的形式写入到一个变量中。这样就可以在需要时使用格式化后的字符串。
$num = 12345;
$text = sprintf("%0.2f",$num);
echo $text; //12345.00
3.常用的字符串格式化函数
3.1 去除空格和字符串填补函数
3.1.1 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码值中的数字和小写字母。
$str = " lamp "; //声明一个字符串,其中左侧有三个空格,右侧有两个空格,总长度为9个字符
echo strlen($str); //9
echo strlen(ltrim($str)); //6
echo strlen(rtrim($str)); //7
echo strlen(trim($str)); //4
$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
3.1.2 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 = "LAMP";
echo str_pad($str,10); //输出:LAMP 长度为10,默认使用空格在右边填补"LAMP"
echo str_pad($str,10,"-=",STR_PAD_LEFT); //输出:-=-=-=LAMP
echo str_pad($str,10,"_",STR_PAD_BOTH); //输出:___LAMP___
echo str_pad($str,6,"___"); //输出:LAMP__
3.2 字符串大小写的转换
例句:$lamp = "lamp is composed of Linux、Apace、MySQL and PHP";
3.2.1 strtoupper()
该函数用于将给定的字符串全部转换为大写字母,只有一个参数
echo strtoupper($lamp); //输出:LAMP IS COMPOSED OF LINUX、APACHE、MYSQL AND PHP
3.2.2 strtolower()
该函数用于将给定的字符串全部转换为小写字母,只有一个参数
echo strtolower($lamp); //输出:lamp is composed of linux、apache、mysql and php
3.2.3 ucfirst()
该函数用于将给定的字符串的首字母转换为大写,其余字母不变,只有一个参数
echo ucfirst($lamp); //输出:Lamp is composed of Linux、Apache、 MySQL and PHP
3.2.4 ucwords()
该函数用于将给定的字符串中全部以空格分隔的单词首字母转换为大写,只有一个参数
echo ucwords($lamp); //输出:Lamp Is Composed Of Linux、Apache、MySQL And PHP
3.3和HTML标签相关的字符串格式化
3.3.1 nl2br()
该函数在字符串中的每个新行"\n"之前插入HTML换行符"<br/>".
echo nl2br("One line.\nAnother line.");
//输出:One line
Another line
3.3.2 htmlspecialchars()
原型:string htmlspecialchars(string string[,int quote_style[,string charset]])
该函数可以将一些预定义的字符转换为HTML实体。此函数用在预防使用者提供的文字中包含了HTML的标记。以下是该函数可以转换的字符:
* “ & ”(和号)转换为"&".
* “ " ”(双引号)转化为"""。
* “ ‘ ”(单引号)转换为"'"。
* “ < ”(小于)转换为"<"。
* “ > ”(大于)转换为">".
该函数中第一个参数是带有HTML标记待处理的字符串,为必选项。第二个参数为可选参数,用来决定引号的转换方式。默认值为ENT_COMPAT将只转换 双引号,而保留单引号;ENT_QUOTES将同时转换这两种引号;而ENT_NOQUOTES将不对引号进行转换。第三个参数也是可选的值,用于指定所 处理字符串的字符集,默认的字符集是“ISO88511-1”。还有其他可用的合法字符集(如:UTF--8等)。如果无法被识别的字符集将被忽略,并由 默认的字符集ISO-88511-1代替。
$str = "<B>WebServer:</B> & 'Linux' & 'Apache'";
echo htmlspecialchars($str,ENT_COMPAT)."<br>";
echo htmlspecialchars($str,ENT_QUOTES)."<br>";
echo htmlspecialchars($str,ENT_NOQUOTES);
在浏览器中的输出结果:
<B>WebServer:</B> & 'Linux' & 'Apache'
<B>WebServer:</B> & 'Linux' & 'Apache'
<B>WebServer:</B> & 'Linux' & 'Apache'
如果在浏览器中查看源代码,会看到如下结果:
<B>WebServer:</B> & 'Linux' & 'Apache'<br>
<B>WebServer:</B> & 'Linux' & 'Apache'<br>
<B>WebServer:</B> & 'Linux' & 'Apache'
3.3.3 htmlentities()
该函数将所有的非ASCII码字符转换为对应的实体代码。该函数与htmlspecialchars()函数的使用语法格式一致,但该函数可以转义更多的HTML字符。
3.3.4 stripslashes()
在处理表单中提交的数据时,不仅要通过前面介绍的函数将HTML的标记符号和一些特殊字符转换为HTML实体,还需要对引号进行处理。因为被提交的表单数据中的“ ' ”、“ " ”和“ \ ”等字符前将被自动加上一个斜线"\"。这是由于PHP配置文件php.ini中的选项magic_quotes_gpc在起作用,默认是打开的,如果不关闭它则要使用函数stripslashes()删除反斜线。如果不处理,将数据保存到数据库中时,有可能会被数据库误当成控制符而引起错误。函数stripslashes()只有一个被处理的字符串作为参数,返回处理后的字符串。通常使用 htmlspecialchars()函数与stripslashes()函数复合的方式,联合处理表单中提交的数据。
3.4 其他字符串格式化函数
3.4.1 strrev()
该函数的作用是将输入的字符串反转,只提供一个要处理的字符串作为参数,返回反转后的字符串。
echo strrev("http://www.baidu.net"); //输出结果:ten.udiab.www//:ptth
3.4.2 number_format()
格式:string number_format(float number[,int decimals[,string dec_point,string thousands_sep]])
该函数通过千位分组来格式化数字。该函数返回格式化后的数字,该函数支持一个、两个或四个参数(不是三个)。第一个参数为必选项,提供要被格式化的数字。如果未设置其他参数,则数字会被格式化为不带小数点且以逗号(,)作为分隔符的数字。第二个参数是可选项,规定使用多少个小数位。如果设置了该参数,则使用点号(.)作为小数点来格式化数字。第三个参数也是可选的参数,规定用什么字符串作为小数点。第四个参数也是可选的,规定用做千位分隔符的字符串。如果设置了该参数,那么所有其他参数都是必需的。
$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
3.4.3 md5()
格式:string md5(string str[,bool raw_output])
该函数是将一个字符串进行MD5算法加密,默认返回一个32位的十六进制字符串。其中第一个参数表示待处理的字符串,是必选项。第二个参数需要一个布尔类型数值,是可选项。默认值为FALSE,返回一个32位的十六进制字符串。如果设置为FALSE,将返回一个16位的二进制数。
$password = "lampbrother";
echo md5($password)."<br>"; //输出:9d04ebc09335c41d27768c12c530ef41
在PHP中提供了一个对文件进行MD5加密的函数md5_file(),使用的方式和md5()函数类似。
4.字符串比较函数
4.1 按字节书序进行字符串比较
4.1.1 strcmp()和strcasecmp()
格式:int strcmp(string str1,string st2)
int strcasecmp(string str1,string str2)
这两个函数都是按字节进行字符串的比较,其中函数strcasecmp()可以忽略字符串中字母的大小进行比较。当然也可以对中文等多字节字符进行比较。函数通过对输入的str1和str2两个字符串,按照字节的ASCII值从两个字符串的首字节开始比较,如果相等则进入下一个字节的比较,直至结束比较。返回以下三个值之一:
(1)如果str1等于str2则返回0.
(2)如果str1大于str2则返回1.
(3)如果str1小于str2则返回-1
$userName = "Admin";
echo strcmp($user,"admin"); //输出:-1
echo strcmp($user,"Admin"); //输出:0
echo strcasecmp($user,"admin"); //输出:0
4.2按自然顺序进行字符串比较
strnatcmp()
该函数按自然顺序比较两个自然两个字符串,该函数对大小写敏感。其使用格式与strcmp()函数相似。
$file1 = "file11.txt";
$file2 = "file2.txt";
echo strnatcmp($file1,$file2); //输出:1