字符串的处理和分析在任何编程语言中都是一个重要的基础,往往是简单而重要的。信息的分类、解析、存储和显示,以及网络中的数据都需要操作字符串来完成。尤其在web开发中更为重要,程序员大部分工作都是在操作字符串,本文将详细介绍php中的字符串函数

  [注意]关于javascript中字符串的属性和方法移步至此

特点

  因为php是弱类型语言,所以其他类型的数据一般都可以直接应用于字符串操作函数中,而自己转换成字符串类型进行处理

echosubstr("1234567",2,4);//将字串用函数substr()处理,输出子字符串345echosubstr(123456,2,4);//将整型用字串函数处理,输出同样是字符串345echohello;//先找hello常量,找不到就会将常名看作是字符串使用

  字符串貌似数组,可以使用中括号语法,但由于无法与真正的数组进行区别,带来二义性,所以最好使用功能相同的花括号

$str="lamp";echo$str."<br>";echo$str{0};//输出字符串$str中第一个字符lecho$str[1];//输出字符串$str中第二个字符a,[]也可以,不过已过时

  在处理变量解析时,如果在字符串中遇到美元符号,解析器会尽可能多地取得后面的字符以组成一个合法的变量名,如果想明确指定名字的结束,用花括号把变量名括起来

$lamp=array('os'=>'Linux');//可以解析echo"AOSis$lamp[os].";//不能解析,如果在对关联数组下标使用引号就必须使用花括号,否则将出错echo"AOSis$lamp['os'].";//可以解析,如果在对关联数组下标使用引号就必须使用花括号,否则将出错echo"AOSis{$lamp['os']}.";//可以解析,注意PHP将数组下标看作常量名,常量不存在时将常量名称转为字符串,效率低echo"AOSis{$lamp[os]}.";

  [注意]在php中,一个GB2312编码的汉字占2个字节,一个UTF-8编码的汉字占3个字节

输出

echo()

voidecho(string$arg1[,string$...])

  echo()函数用来输出一个或多个字符串,它会输出所有参数,且不会换行,没有返回值

  echo不是一个函数, 因此不一定要使用小括号来指明参数,单引号,双引号都可以。另外,如果想给echo 传递多个参数,就不能使用小括号

<?phpecho"HelloWorld";$foo="foobar";echo"foois$foo";//fooisfoobarecho$foo;//foobar?>

print()

intprint(string$arg)

  print()函数用来输出字符串,且总是返回 1

<?phpprint("HelloWorld");$foo="foobar";print"foois$foo";//fooisfoobarprint$foo;//foobar?>

var_dump(echo('123'));//报错var_dump(print('123'));//int1

  echo可以接受多个参数(不可以加括号),而print不可以

<?phpecho'1','2','3';//123print'a','b','c';//报错?>

exit()

  exit()函数用来输出一个消息并且退出当前脚本,没有返回值,同名函数为die()

voidexit([string$status])voidexit(int$status)

  如果 status 是一个字符串,在退出之前该函数会打印status;如果 status 是一个 integer,该值会作为退出状态码,并且不会被打印输出。退出状态码应该在范围0至254,不应使用被PHP保留的退出状态码255。 状态码0用于成功中止程序

<?phpexit('0');//0exit(0);//无返回值?>

printf

  printf()函数用于输出格式化字符串

intprintf(string$format[,mixed$args[,mixed$...]])

sprintf

  sprintf()函数用于把格式化的字符串写入一个变量中

stringsprintf(string$format[,mixed$args[,mixed$...]])

  字符串转换格式如下

%%返回百分比符号%b二进制数%c依照ASCII值的字符%d带符号十进制数%e科学计数法(如1.5e3)%u无符号十进制数%f或%F浮点数%o八进制数%s字符串%x或%X十六进制数

<?php$var=10;printf("%%,%b,%c,%d,%e,%u,%o,%f,%s,%x",$var,$var,$var,$var,$var,$var,$var,$var,$var,$var);//%,1010,,10,1.000000e+1,10,12,10.000000,10,a$result=sprintf("%%,%b,%c,%d,%e,%u,%o,%f,%s,%x",$var,$var,$var,$var,$var,$var,$var,$var,$var,$var);var_dump($result);//string'%,1010,,10,1.000000e+1,10,12,10.000000,10,a'(length=44)?>

  上面的两个函数不仅可以设置转换类型,还可以设置精确度、填充符和对齐方式

%%.%#  在结果前面填充#号%-   左对齐

printf("%'#10.3f",123);//###123.000printf("%10.3f",123);//123.000(右对齐)printf("%-10.3f",123);//123.000(左对齐)

空格

trim()

  trim()函数用于去除字符串首尾处的空白字符(或者其他字符),过滤后的字符串

stringtrim(string$str[,string$charlist="\t\n\r\0\x0B"])

  此函数返回字符串str去除首尾空白字符后的结果。如果不指定第二个参数,trim() 将去除这些字符:

""(ASCII32(0x20)),普通空格符"\t"(ASCII9(0x09)),制表符"\n"(ASCII10(0x0A)),换行符"\r"(ASCII13(0x0D)),回车符"\0"(ASCII0(0x00)),空字节符"\x0B"(ASCII11(0x0B)),垂直制表符

  charlist为可选参数,过滤字符也可由charlist参数指定。一般要列出所有希望过滤的字符,也可以使用 “..” 列出一个字符范围

ltrim()

  ltrim函数用于删除字符串开头的空白字符(或其他字符)

rtrim()

  rtrim函数用于删除字符串末端的空白字符(或者其他字符) 

<?php$text="\t\tHelloWorlda1a1a1";$trimmed=trim($text);var_dump($trimmed);//string'HelloWorlda1a1a1'(length=18)$trimmed=trim($text,"a1");var_dump($trimmed);//string'HelloWorld'(length=13)$trimmed=trim($text,"1..e");//string'HelloWorl'(length=12)var_dump($trimmed);$ltrimmed=ltrim($text);var_dump($ltrimmed);//string'HelloWorlda1a1a1'(length=22)$rtrimmed=rtrim($text);var_dump($rtrimmed);//string'HelloWorlda1a1a1'(length=23)?>

str_pad()

  str_pad()函数使用另一个字符串填充字符串为指定长度

stringstr_pad(string$input,int$pad_length[,string$pad_string=""[,int$pad_type=STR_PAD_RIGHT]])

  该函数返回input被从左端、右端或者同时两端被填充到制定长度后的结果。如果可选的 pad_string 参数没有被指定,input 将被空格字符填充,否则它将被 pad_string 填充到指定长度

  [注意]如果pad_length的值是负数,小于或者等于输入字符串的长度,不会发生任何填充

<?php$input="Alien";echostr_pad($input,10);//输出"Alien"echostr_pad($input,10,"-=",STR_PAD_LEFT);//输出"-=-=-Alien"echostr_pad($input,10,"_",STR_PAD_BOTH);//输出"__Alien___"echostr_pad($input,6,"___");//输出"Alien_"?>

大小写

strtolower()

  strtolower — 将字符串转化为小写

strtoupper()

  strtoupper — 将字符串转化为大写

ucfirst()

  ucfirst — 将字符串的首字母转换为大写

ucwords()

  ucwords — 将字符串中每个单词的首字母转换为大写

<?php$foo='helloworld!';var_dump(ucwords($foo));//string'HelloWorld!'(length=12)var_dump(ucfirst($foo));//string'Helloworld!'(length=12)var_dump(strtoupper($foo));//string'HELLOWORLD!'(length=12)var_dump(strtolower($foo));//string'helloworld!'(length=12)?>

HTML

nl2br()

  nl2br — 在字符串所有新行之前插入 HTML 换行标记

stringnl2br(string$string[,bool$is_xhtml=true])

<?php/*fooisn't<br/>bar*/echonl2br("fooisn't\nbar");?>

htmlspecialchars()

stringhtmlspecialchars(string$string[,int$flags=ENT_COMPAT|ENT_HTML401[,string$encoding=ini_get("default_charset")[,bool$double_encode=true]]])

  htmlspecialchars - 把指定特殊符号转换成实体

&(ampersand)&amp;"(doublequote)&quot;,unlessENT_NOQUOTESisset'(singlequote)&#039;or&apos;<(lessthan)&lt;>(greaterthan)&gt;

<?php$new="<script>alert(1)</script>";echo$new;//弹出1$new=htmlspecialchars("<script>alert(1)</script>");echo$new;//显示字符串"<script>alert(1)</script>"?>

<?php$str="<B>WebServer:</B>&'Linux'&'Apache'";//常有HTML标记和单引号的字符串echohtmlspecialchars($str,ENT_COMPAT);//转换HTML标记和转换双引号echo"<br>\n";echohtmlspecialchars($str,ENT_QUOTES);//转换HTML标记和转换两种引号echo"<br>\n";echohtmlspecialchars($str,ENT_NOQUOTES);//转换HTML标记和不对引号转换?>

htmlentities()

stringhtmlentities(string$string[,int$flags=ENT_COMPAT|ENT_HTML401[,string$encoding=ini_get("default_charset")[,bool$double_encode=true]]])

  htmlentities - 将所有的非ASCII码转换成对应实体代码

  htmlentities()和htmlspecialchars()的功能都是转换字符为HTML字符编码,特别是url和代码字符串,防止字符标记被浏览器执行。htmlentities转换所有的html标记,htmlspecialchars只格式化& ' " < 和 > 这几个特殊符号

<?php$str="<p>123</p>";echo$str;//显示段落123echohtmlentities($str);//'123'echohtmlspecialchars($str);//'123'?>

strip_tags()

  strip_tags — 尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果

stringstrip_tags(string$str[,string$allowable_tags])

  使用可选的第二个参数allowable_tags指定不被去除的字符列表

<?php$text='<p>Testparagraph.</p><!--Comment--><ahref="#fragment">Othertext</a>';echostrip_tags($text);//'Testparagraph.Othertext'echo"\n";echostrip_tags($text,'<p>').'<br>';//<p>Testparagraph.</p>Othertext$text='<div><b>123</b></div>';echostrip_tags($text);//'123'?>

addslashes()

  addslashes — 使用反斜线引用字符串,返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)

stringaddslashes(string$str)

<?php$str="IsyournameO'reilly?";echoaddslashes($str);//"IsyournameO\'reilly?"?>

stripslashes()

  stripslashes — 反引用一个引用字符串

stringstripslashes(string$str)

<?php$str="IsyournameO\'reilly?";echostripslashes($str);//"IsyournameO'reilly?"?>

格式化

strrev()

  strrev — 反转字符串

stringstrrev(string$string)

<?phpechostrrev("Helloworld!");//输出"!dlrowolleH"?>

strlen()

  strlen — 获取字符串长度

intstrlen(string$string)

<?php$str='abcdef';echostrlen($str);//6$str='abcd';echostrlen($str);//7?>

md5()

  md5 — 计算字符串的 MD5 散列值

stringmd5(string$str[,bool$raw_output=false])

  如果可选的raw_output被设置为TRUE,那么MD5报文摘要将以16字节长度的原始二进制格式返回

<?php$str='apple';if(md5($str)==='1f3870be274f6c49b3e31a0c6728957f'){echo"Wouldyoulikeagreenorredapple?";}?>

比较

strcmp()

  strcmp — 字符串比较,如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0

intstrcmp(string$str1,string$str2)

<?php$var1="Hello";$var2="hello";if(strcmp($var1,$var2)!==0){echo'$var1isnotequalto$var2inacasesensitivestringcomparison';}?>

strncmp()

  strncmp — 限定字符串长度的字符串比较

intstrncmp(string$str1,string$str2,int$len)

  如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0

<?phpechostrncmp("xybc","a3234",0);//0echostrncmp("xybc","a3234",1);//1?>

strcasecmp()

  strcasecmp — 字符串比较(不区分大小写),如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0

intstrcasecmp(string$str1,string$str2)

<?php$var1="Hello";$var2="hello";if(strcasecmp($var1,$var2)==0){echo'$var1isequalto$var2inacase-insensitivestringcomparison';}?>

strnatcmp()

  strnatcmp — 使用自然排序算法比较字符串

intstrnatcmp(string$str1,string$str2)

  如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0

<?php$arr1=$arr2=array("img12.png","img10.png","img2.png","img1.png");usort($arr1,"strcmp");print_r($arr1);//Array([0]=>img1.png[1]=>img10.png[2]=>img12.png[3]=>img2.png)usort($arr2,"strnatcmp");//Array([0]=>img1.png[1]=>img2.png[2]=>img10.png[3]=>img12.png)print_r($arr2);?>

位置

strstr()

  strstr()查找字符串的首次出现,返回haystack字符串从needle第一次出现的位置开始到haystack结尾的字符串

stringstrstr(string$haystack,mixed$needle[,bool$before_needle=false])

  before_needle若为TRUE,strstr()将返回needle在haystack中的位置之前的部分

<?php$email='name@example.com';$domain=strstr($email,'@');echo$domain;//@example.com$user=strstr($email,'@',true);echo$user;//name?>

strpos()

  strpos()查找字符串首次出现的位置

mixedstrpos(string$haystack,mixed$needle[,int$offset=0])

<?php//忽视位置偏移量之前的字符进行查找$newstring='abcdefabcdef';$pos=strpos($newstring,'a',1);//$pos=7,不是0?>

strrpos()

  strrpos()计算指定字符串在目标字符串中最后一次出现的位置

intstrrpos(string$haystack,string$needle[,int$offset=0])

<?php$foo="0123456789a123456789b123456789c";var_dump(strrpos($foo,'7',-5));//从尾部第5个位置开始查找//结果:int(17)var_dump(strrpos($foo,'7',20));//从第20个位置开始查找//结果:int(27)var_dump(strrpos($foo,'7',28));//结果:bool(false)?>

子串

substr()

  substr()返回字符串的子串

stringsubstr(string$string,int$start[,int$length])

<?php$rest=substr("abcdef",-1);//返回"f"$rest=substr("abcdef",-2);//返回"ef"$rest=substr("abcdef",-3,1);//返回"d"?><?php$rest=substr("abcdef",0,-1);//返回"abcde"$rest=substr("abcdef",2,-1);//返回"cde"$rest=substr("abcdef",4,-4);//返回""$rest=substr("abcdef",-3,-1);//返回"de"?>

替换

str_replace()

  str_replace()返回一个字符串或者数组。该字符串或数组是将 subject 中全部的 search 都被 replace 替换之后的结果

mixedstr_replace(mixed$search,mixed$replace,mixed$subject[,int&$count])

  如果count被指定,它的值将被设置为替换发生的次数

<?php//赋值:<bodytext='black'>$bodytag=str_replace("%body%","black","<bodytext='%body%'>");//赋值:HllWrldfPHP$vowels=array("a","e","i","o","u","A","E","I","O","U");$onlyconsonants=str_replace($vowels,"","HelloWorldofPHP");//赋值:Youshouldeatpizza,beer,andicecreameveryday$phrase="Youshouldeatfruits,vegetables,andfibereveryday.";$healthy=array("fruits","vegetables","fiber");$yummy=array("pizza","beer","icecream");$newphrase=str_replace($healthy,$yummy,$phrase);//赋值:2$str=str_replace("ll","","goodgollymissmolly!",$count);echo$count;?>

分割

【explode()】

  explode()使用一个字符串分割另一个字符串,返回由字符串组成的数组,每个元素都是string的一个子串,它们被字符串delimiter作为边界点分割出来

arrayexplode(string$delimiter,string$string[,int$limit])

  如果设置了limit参数并且是正数,则返回的数组包含最多limit个元素,而最后那个元素将包含string的剩余部分;如果limit参数是负数,则返回除了最后的-limit个元素外的所有元素;如果limit是0,则会被当做1

<?php//示例1$pizza="piece1piece2piece3piece4piece5piece6";$pieces=explode("",$pizza);echo$pieces[0];//piece1echo$pieces[1];//piece2//示例2$data="foo:*:1023:1000::/home/foo:/bin/sh";list($user,$pass,$uid,$gid,$gecos,$home,$shell)=explode(":",$data);echo$user;//fooecho$pass;//*?>

【implode()】

  implode()将一个一维数组的值转化为字符串

stringimplode(string$glue,array$pieces)stringimplode(array$pieces)

<?php$array=array('lastname','email','phone');$comma_separated=implode(",",$array);echo$comma_separated;//lastname,email,phone//Emptystringwhenusinganemptyarray:var_dump(implode('hello',array()));//string(0)""?>