{php 字符串函数}

php操作字符串

在Web应用中,用户和系统的交互基本上是用文字来进行的,因此系统对文本信息,即字符串的处理非常重要。文本字符串操作内容很多,本节将一一介绍。

3.1.1  去除空格和其他特殊符号

有时,需要去掉字符串中的空格或者其他没有意义的符号。例如,在一个电子商务应用中,当用户填写订单的内容时(如联系地址),可能输入一些空格、句号等字符,系统希望在存储之前把它们去掉,只剩下有意义的信息。为了完成类似于上述需求的问题,PHP4及以上版本提供了4个去除字符串中特殊符号的函数。

     string trim(string str [, string charlist]):去除字符串str首尾处空格或其他特殊符号。

     string ltrim(string str [, string charlist]):去除字符串str首的空格或其他特殊符号。

     string rtrim(string str [, string charlist]):去除字符串str尾的空格或其他特殊符号。

     string chop(string str [, string charlist]):功能同rtrim()。

以上函数的第1个参数str为待操作的字符串,第2个可选参数charlist指定想要去除的特殊符号,当缺省时默认值为去掉下列字符:空格(" ")、制表符(\t)、换行符(\n)、回车符(\r)、空值(\0)。还可以使用“..”通过第2个参数指定需要去除一个范围内的字符,例如“a..d”指去掉ASCII码值介于a和d之间的字符,即a、b、c、d。

下面以trim()为例说明上述函数的使用。

 1    <!--去除字符串中的特殊字符:trim.php-->

2    <?php

3        $init_str = ",山东省济南市经十路8号1. ";    //前后都包含一个空格

4        echo $init_str."#<br>";

5        $trimmed_str = trim($init_str);        //"山东省济南市经十路8号1."

6        echo $trimmed_str."#<br>";

7        $trimmed_str = trim($init_str,', .');//"山东省济南市经十路8号1"。注意,第2个参数包括3个字符。

8        echo $trimmed_str."#<br>";

9        $trimmed_str = trim($init_str,', .0..9');    //"山东省济南市经十路8号"。0..9说明要去掉所有的数字字符

10       echo $trimmed_str."#<br>";

11   ?>

第3行定义了一个字符串变量,在其首部有空格和逗号,其尾有句号和空格;

第5行使用不带第2个参数的trim()函数去掉了其中首尾处的空格符号;

第7行使用带有第2个参数的trim()函数去掉了其首尾处的第2个参数中所包含的字符,即去掉了首尾处的空格、逗号和句号。

第9行trim()中第2个参数中的“0..9”说明将要去掉位于0和9的ASC码范围内的所有字符。

ltrim()、rtrim()的使用同trim()类似,而chop()实际上是rtrim()的别名,其功能与rtrim()一样,不再赘述。

3.1.2  加入和去除反斜杠

在许多应用中,例如生成SQL语句时(SQL语句将在第二部分中介绍),需要在其中加入转义字符‘\’,手工构造起来相当麻烦。为了解决类似问题,PHP提供了自动在字符串中加入或去除转义字符的函数。

     string addcslashes(string str, string charlist):第1个参数str为待操作的原始字符串,第2个参数charlist说明需要在原始串的哪些字符前加上字符‘\’。

     string stripcslashes(string str):去掉字符串中的‘\’。

二者的使用参考下面代码。

1    <!--加入转义字符:addcslashes.php-->

2    <?php

3    $init_str = "select * from Books where name = 'PHP手册'";

4    echo $init_str."#<br>";

5    $new_str = addcslashes($init_str,"'");

6    echo $new_str."#<br>";

7    $init_str2 = stripcslashes($new_str);

8    echo $init_str2."#<br>";

9    ?>

代码在第5行在$init_str中的‘’’前加上了‘\’,又在第9行将其去掉。

3.1.3  生成HTML元素

HTML元素的书写非常麻烦,下面简单列出一些常用字符在HTML中的表示方式。

     '&':'&amp;'

     双引号‘"’:'&quot;'

     单引号‘'’:'&#039;'

     '<' :'&lt;'

     '>' :'&gt;'

此处,称'&'等为HTML元素,'&amp;' 等为其显示字符串。例如,若想在页面上的显示 “<a href='test'>链接</a>”,HTML应写为“&lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;”,否则,将只在页面上显示一个链接信息。

PHP提供了下面的函数来自动转化HTML元素。

     string htmlspecialchars(string str [, int quote_style [, string charset]]):把一些常用的HTML元素转换为显示字符串。

     string htmlentities(string str [, int quote_style [, string charset]]):把所有的HTML元素转换为显示字符串。

     string html_entity_decode(string str [, int quote_style [, string charset]]):把显示字符串转化为HTML元素。

上面函数中,参数str表示原始字符串;可选参数quote_style确定是否转换双引号和单引号,取值范围为{ ENT_COMPAT , ENT_QUOTES ,  ENT_NOQUOTES},分别表示只转换双引号、全转换、全不转换,缺省时默认值为ENT_COMPAT;第3个参数charset指定了转换中所用的字符集。PHP4及以上版本所支持的字符集参考表3.1。

表3.1                                               PHP4及以上版本支持的字符集

字 符 集

说  明

ISO-8859-1

西欧字符集

ISO-8859-15

西欧字符集扩展

UTF-8

兼容ASCII的宽字节字符集

cp1252

西欧字符集,Windows系统默认

BIG5

繁体中文,用于中国台湾省

GB2312

简体中文,用于中国大陆

BIG5-HKSCS

繁体中文扩展,用于中国香港

Shift_JIS

日文

EUCJP

日文

下面的示例中,首先使用htmlentities()函数得到一个HTML语句的显示字符串,然后再用html_entity_decode()函数重新把显示字符串转回HTML元素。运行结果如图3.1所示。

1    <!--生成HTML元素:htmlspecialchars.php-->

2    <?php

3    $orig = "我正在<b><font color=red>学习!</font></b> ";

4    $a = htmlentities($orig,ENT_COMPAT,"GB2312");

5    $b = html_entity_decode($a);

6    echo $a; // I'll &quot;walk&quot; the &lt;b&gt;dog&lt;/b&gt; now

7    echo $b; // I'll "walk" the <b>dog</b> now

8    ?>

图3.1  PHP生成HTML元素示例

注意

函数html_entity_decode()只支持PHP4.0.3及以上版本。

除上面所提到的3个函数之外,用于HTML元素操作的函数还包括nl2br()、get_html_translation_table()等,功能与上述函数类似,本书不再一一详述。

3.1.4  分解字符串

分解字符串是指把一个字符串通过特殊的符号分解为许多子串。例如,时间字符串“2005-01-01 12:59:59”可以利用符号“-”、空格和“:”分解为年月日时分秒具体的值。PHP提供了下列函数完成类似功能:

     array split(string pattern, string str [, int limit])

其中,参数pattern指定了作为分解标识的符号;str为待操作的原始串;第3个可选参数limit为返回子串个数的最大值,缺省时为全部返回。函数的返回值为数组,将在3.2节对其进行介绍。此处,可以暂时把函数返回值理解为多个子串。

下面的示例可以把字符串“2005-01-01 12:59:59”分解为年月日时分秒子串。

1    <!--分解字符串:split.php-->

2    <?php   

3    $date = "2005-01-01 12:59:59";

4    list ($year,$month,$day,$hour,$minite,$second) = split ('[- :]',$date);

5    echo"{$year}年{$month}月{$day}日{$hour}时{$minite}分{$second}秒<br>\n";

6    ?>

上例将输出“2005年01月01日12时59分59秒”。第4行使用split函数把时间分解,分解的标识符包括“-”、空格和“:”,在第5行将其输出。

除split之外,功能相似的函数还包括preg_split(),explode(),implode(),chunk_split()和 wordwrap()等。

3.1.5  格式化字符串

格式化字符串用于按一定的格式输出含有许多变量的文本,是最常用的一种操作。PHP的fprintf()函数完成这个功能,习惯使用C语言的读者肯定对其感到熟悉。函数原型为:

     string sprintf(string format, mixed [args]...)

参数format是转换后的格式,各个变量都以“%”后的字符规定其格式,后面的多个参数以此对应于format中的“%”处。下面示例格式化浮点数的小数部分。

1    <!--格式化字符串:sprintf.php-->

2    <?

3    $name="张三";

4    $money1 = 68.75;

5    $money2 = 54.35;

6    $money = $money1 + $money2;

7    // 此时变数 $money 值为 "123.1";

8    $formatted = sprintf ("%s有¥%01.2f。",$name, $money);

9    echo $formatted;    //张三有¥123.10。

10   ?>

第6行通过算术运算,得到$money的值为123.1;而在第8行通过sprintf中的%01.2定义其格式为显示小数点后两位。

除sprintf()之外,常用于格式化数据的函数还有printf()、sprintf()、sscanf()、fscanf()、vsprintf()和number_format()等。

3.1.6  获取和替换子串

获取子串是指从一个串中获取其中连续的一部分。例如,从串“2005-01-01 12:59:59”中取得时间串。PHP提供了两个函数来获取或替换串的某一部分:

     string substr(string str, int start [, int length]):获取子串,第1个参数str是待操作的串,第2个参数start表明子串在总串中的起始位置,第3个可选参数指定所获取的子串长度,如果为正数则表明子串从start向右取,否则向左取;缺省时默认值为从start取到串尾。

     string substr_replace(string str, string replacement, int start [, int length]):在获取的基础上进行替换,即将获取出的子串替换为其第2个参数replacement。

下面的示例中,首先利用substr()获取串“2005-01-01 12:59:59”的时间信息,然后使用substr_replace()函数将年份信息改为“2006”:

1    <!--获取子串:substr.php-->

2    <?

3        $date = "2005-01-01 12:59:59";

4        $time=substr($date,11,8);  //子串"12:59:59"的起始位置为11,长度为8

5        echo "time:$time<br>";

6        $new_date=substr_replace($date,"2006",0,4);

7        echo "new date:$new_date";

8    ?>

3.1.7  定位字符

定位字符是指寻找某个字符在串中最先出现的位置,函数strpos()可以完成此功能。

     int strpos(string str, char needle):第1个参数str为待处理的串,第2个参数needle为待寻找的字符。下面这个示例,对一个电子邮件地址进行处理,首先使用strpos()寻找字符“@”,然后结合获取子串函数strstr()获取用户名。

1    <!--字符定位:strpos.php-->

2    <?

3        $email = "[email protected]";

4        $i=strpos($email,'@');

5        $name=substr($email,0,$i);

6        echo $name;

7    ?>

示例第4行使用strpos()获取了字符’@’的位置,然后在第5行使用substr()得到用户名子串信息。

3.1.8  求串长度

求串长度也是常用的操作,所使用的函数为strlen():int strlen ( string str)。

这个函数很简单,返回字符串str的长度。仍以上一小节的例子为例,从电子邮件串中替换用户的名字,即改为[email protected]

1    <!--字符定位:strpos.php-->

2    <?

3        $email = "[email protected]";

4        $i=strpos($email,'@');

5        $name=substr($email,0,$i);

6        $email=substr_replace($email,"lisi",0,strlen($name));

7        echo $email;

8    ?>

3.1.9  获取ASCII编码

把字符转化为ASCII编码在实际应用中有时是很有用的,例如,字符串在数据库中以二进制形式存放,而需要数据获取函数返回ASCII码串时,就需要把其转化为字符串显示。PHP提供的转换ASCII码和字符的函数有以下两种。

     string chr(int ascii):把ASCII码转化为字符串。

     int ord(string string):把字符串转化为ASCII码。

二者的使用参考下例。

1    <!--ASCII转换:chr.php-->

2    <?

3        $letter = chr(65);        //A

4        $ascii=ord('A');           //65

5        echo $letter;

6        echo    $ascii;

7    ?>

3.1.10  比较字符串

字符串的比较规则是按照字典排序方法,排在前面的小于后面的。如同在一本英语词典中,后面的词条大于前面的词条。PHP实现字符串比较的函数如下。

     int strncmp(string str1, string str2[, int len]):函数的前两个参数为待比较的两个字符串,第3个可选参数可指定想比较二者从头开始的多少个字符。如果str1>str2,函数返回正数;str1=str2时返回0;str1<str2时返回负数。

1    <!--ASCII转换:chr.php-->

2    <?

3        $str1="China";

4        $str2="Beijing";

5        $i=strcmp($str1,$str2);

6        echo $i;        //1

7    ?>

除strcmp()之外,具有字符串比较或排序功能的函数还strcasecmp(),strncmp(),strncasecmp(),strnatcasecmp(),strstr(),natsort()和natcasesort()。

3.1.11  大小写转换

比较两个字符串是否在不区分大小写时相等,仅仅使用上一小节的strcmp()函数就不行了,这时可将两个字符串同时转换为大写或小写,然后再进行比较即可。例如,在判断网站登录的用户名和密码(不区分大小写时)时,常需要这样。PHP实现字符串大小写转换的函数如下。

     string strtolower(string str):将str转换为小写形式。

     string strtoupper(string string):将str转换为大写形式。

     string ucfirst(string str):将str的第一个字符转换为大写形式。

     string ucwords(string str):将str中每一个单词的首字母转换为大写形式。

参考下例。

1    <!--大小写转换:Upper_Lower.php-->

2    <?

3        $str1="shandong province";

4        $str2="China";   

5        $str1=ucwords($str1);

6        echo $str1;         //Shangdong Province   

7        $str1=strtoupper($str1);

8        echo $str1;         //SHANGDONG PROVINCE   

9        $str2=strtolower($str2);

10       echo $str2;         //china

11    ?>

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

PHP字符串函数分类 

1查找字符位置函数:
strpos($str,search,[int]):查找search在$str中的第一次位置从int开始;
stripos($str,search,[int]):函数返回字符串在另一个字符串中第一次出现的位置。该函数对大小写不敏感
strrpos($str,search,[int]):查找search在$str中的最后一次出现的位置从int
 
2、提取子字符函数(双字节)
submit($str,int start[,int length]):从$str中strat位置开始提取[length长度的字符串]。
strstr($str1,$str2):从$str1(第一个的位置)搜索$str2并从它开始截取到结束字符串;若没有则返回FALSE。
stristr() 功能同strstr,只是不区分大小写。
strrchr() 从最后一次搜索到的字符处返回;用处:取路径中文件名
3、替换字符串
str_replace(search,replace,$str):从$str中查找search用replace来替换
str_irreplace(search,replace,$str):
strtr($str,search,replace):这个函数中replace不能为"";
substr_replace($Str,$rep,$start[,length])$str原始字符串,$rep替换后的新
字符串,$start起始位置,$length替换的长度,该项可选
4、字符长度
int strlen($str)
5、比较字符函数
int strcmp($str1,$str2):$str1&gt;=<$str2分别为正1,0,-1(字符串比较)
strcasecmp() 同上(不分大小写)
strnatcmp("4","14") 按自然排序比较字符串
strnatcasecmp() 同上,(区分大小写)
6、分割成数组函数
str_split($str,len):把$str按len长度进行分割返回数组
split(search,$str[,int]):把$str按search字符进行分割返回数组int是分割几次,后面的将不分割
expload(search,$str[,int])
7、去除空格:ltrim、rtrim、trim

8、加空格函数
chunk_split($str,2);向$str字符里面按2个字符就加入一个空格;
9、chr、ord--返回指定的字符或ascii

10、HTML代码有关函数
nl2br():使\n转换为&lt;br>。
strip_tags($str[,'<p>']):去除HTML和PHP标记
在$str中所有HTML和PHP代码将被去除,可选参数为html和PHP代码作用是将保留
可选参数所写的代码。
如:echo strip_tags($text, '<br><p>');
htmlspecialchars($str[,参数]):页面正常输出HTML代码参数是转换方式
11、字符大小写转换函数
strtolower($str) 字符串转换为小写
strtoupper($str) 字符串转换为大写
ucfirst($str) 将函数的第一个字符转换为大写
ucwords($str) 将每个单词的首字母转换为大写
12、数据库相关函数
addslashes($str):使str内单引号(')、双引号(")、反斜线(\)与 NUL
字符串转换为\',\",\\。
magic_quotes_gpc = On 自动对 get post cookie的内容进行转义
get_magic_quotes_gpc()检测是否打开magic_quotes_gpc
stripslashes() 去除字符串中的反斜杠
13、连接函数
implode(str,$arr) 将字符串数组按指定字符连接成一个字符串;implode()函数有个别名函数join
addcslashes —— 为字符串里面的部分字符添加反斜线转义字符
addslashes —— 用指定的方式对字符串里面的字符进行转义
bin2hex —— 将二进制数据转换成十六进制表示
chr —— 返回一个字符的ASCII码
chunk_split —— 按一定的字符长度将字符串分割成小块
convert_cyr_string —— 将斯拉夫语字符转换为别的字符
convert_uudecode —— 解密一个字符串
convert_uuencode —— 加密一个字符串
count_chars —— 返回一个字符串里面的字符使用信息
crc32 —— 计算一个字符串的crc32多项式
crypt —— 单向散列加密函数
explode —— 将一个字符串用分割符转变为一数组形式
fprintf —— 按照要求对数据进行返回,并直接写入文档流
get_html_translation_table —— 返回可以转换的HTML实体
html_entity_decode —— htmlentities ()函数的反函数,将HTML实体转换为字符
htmlentities —— 将字符串中一些字符转换为HTML实体
htmlspecialchars_decode —— htmlspecialchars()函数的反函数,将HTML实体转换为字符
htmlspecialchars —— 将字符串中一些字符转换为HTML实体
implode —— 将数组用特定的分割符转变为字符串
join —— 将数组转变为字符串,implode()函数的别名
levenshtein —— 计算两个词的差别大小
localeconv —— 获取数字相关的格式定义
ltrim —— 去除字符串左侧的空白或者指定的字符
md5_file —— 将一个文件进行MD5算法加密
md5 —— 将一个字符串进行MD5算法加密
metaphone —— 判断一个字符串的发音规则
money_format —— 按照参数对数字进行格式化的输出
nl_langinfo —— 查询语言和本地信息
nl2br —— 将字符串中的换行符“\n”替换成“<br />”
number_format —— 按照参数对数字进行格式化的输出
ord —— 将一个ASCII码转换为一个字符
parse_str —— 把一定格式的字符串转变为变量和值
print —— 用以输出一个单独的值
printf —— 按照要求对数据进行显示
quoted_printable_decode —— 将一个字符串加密为一个8位的二进制字符串
quotemeta —— 对若干个特定字符进行转义
rtrim —— 去除字符串右侧的空白或者指定的字符
setlocale —— 设置关于数字,日期等等的本地格式
sha1_file —— 将一个文件进行SHA1算法加密
sha1 —— 将一个字符串进行SHA1算法加密
similar_text —— 比较两个字符串,返回系统认为的相似字符个数
soundex —— 判断一个字符串的发音规则
sprintf —— 按照要求对数据进行返回,但是不输出
sscanf —— 可以对字符串进行格式化
str_ireplace —— 像str_replace()函数一样匹配和替换字符串,但是不区分大小写
str_pad —— 对字符串进行两侧的补白
str_repeat —— 对字符串进行重复组合
str_replace —— 匹配和替换字符串
str_rot13 —— 将字符串进行ROT13加密处理
str_shuffle —— 对一个字符串里面的字符进行随机排序
str_split —— 将一个字符串按照字符间距分割为一个数组
str_word_count —— 获取字符串里面的英文单词信息
strcasecmp —— 对字符串进行大小比较,不区分大小写
strchr —— 通过比较返回一个字符串的部分strstr()函数的别名
strcmp —— 对字符串进行大小比较
strcoll – 根据本地设置对字符串进行大小比较
strcspn —— 返回字符连续非匹配长度的值
strip_tags —— 去除一个字符串里面的HTML和PHP代码
stripcslashes —— 反转义addcslashes()函数转义处理过的字符串
stripos —— 查找并返回首个匹配项的位置,匹配不区分大小写
stripslashes —— 反转义addslashes()函数转义处理过的字符串
stristr —— 通过比较返回一个字符串的部分,比较时不区分大小写
strlen —— 获取一个字符串的编码长度
strnatcasecmp —— 使用自然排序法对字符串进行大小比较,不区分大小写
strnatcmp —— 使用自然排序法对字符串进行大小比较
strncasecmp —— 对字符串的前N个字符进行大小比较,不区分大小写
strncmp —— 对字符串的前N个字符进行大小比较
strpbrk —— 通过比较返回一个字符串的部分
strpos —— 查找并返回首个匹配项的位置
strrchr —— 通过从后往前比较返回一个字符串的部分
strrev —— 将字符串里面的所有字母反向排列
strripos —— 从后往前查找并返回首个匹配项的位置,匹配不区分大小写
strrpos —— 从后往前查找并返回首个匹配项的位置
strspn —— 匹配并返回字符连续出现长度的值
strstr —— 通过比较返回一个字符串的部分
strtok —— 用指定的若干个字符来分割字符串
strtolower —— 将字符串转变为小写
strtoupper —— 将字符串转变为大写
strtr —— 对字符串比较替换
substr_compare —— 对字符串进行截取后的比较
substr_count —— 计算字符串中某字符段的出现次数
substr_replace —— 对字符串中的部分字符进行替换
substr —— 对字符串进行截取
trim —— 去除字符串两边的空白或者指定的字符
ucfirst —— 将所给字符串的第一个字母转换为大写
ucwords —— 将所给字符串的每一个英文单词的第一个字母变成大写
vfprintf —— 按照要求对数据进行返回,并直接写入文档流
vprintf —— 按照要求对数据进行显示
vsprintf —— 按照要求对数据进行返回,但是不输出
wordwrap —— 按照一定的字符长度分割字符串

你可能感兴趣的:(字符串函数)