PHP字符串操作大集合

  

PHP字符串操作大集合

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

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

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

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

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

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

PHP字符串操作大集合    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()为例说明上述函数的使用。

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

  <?php

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

      echo $init_str."#<br>";

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

      echo $trimmed_str."#<br>";

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

      echo $trimmed_str."#<br>";

      $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提供了自动在字符串中加入或去除转义字符的函数。

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

PHP字符串操作大集合    string stripcslashes(string str):去掉字符串中的‘\’。

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

 

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

  <?php

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

   echo$init_str."#<br>";

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

   echo$new_str."#<br>";

   $init_str2= stripcslashes($new_str);

   echo$init_str2."#<br>";

  ?>

 

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

3.1.3 生成HTML元素

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

PHP字符串操作大集合    '&':'&amp;'

PHP字符串操作大集合    双引号‘"’:'&quot;'

PHP字符串操作大集合    单引号‘'’:'&#039;'

PHP字符串操作大集合    '<' :'&lt;'

PHP字符串操作大集合    '>' :'&gt;'

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

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

PHP字符串操作大集合    string htmlspecialchars(string str [, int quote_style [, stringcharset]]):把一些常用的HTML元素转换为显示字符串。

PHP字符串操作大集合    string htmlentities(string str [, int quote_style [, stringcharset]]):把所有的HTML元素转换为显示字符串。

PHP字符串操作大集合    string html_entity_decode(string str [, int quote_style [, stringcharset]]):把显示字符串转化为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所示。

 

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

  <?php

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

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

   $b =html_entity_decode($a);

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

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

  ?>

PHP字符串操作大集合

图3.1 PHP生成HTML元素示例

 

 

PHP字符串操作大集合注意

 

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

 

 

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

3.1.4 分解字符

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

PHP字符串操作大集合    array split(string pattern, string str [, int limit])

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

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

 

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

  <?php   

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

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

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

  ?>

 

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

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

3.1.5 格式化字符

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

PHP字符串操作大集合    string sprintf(string format, mixed [args]...)

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

 

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

  <?

  $name="张三";

   $money1 =68.75;

   $money2 =54.35;

   $money =$money1 + $money2;

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

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

   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-0112:59:59”中取得时间串。PHP提供了两个函数来获取或替换串的某一部分:

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

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

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

 

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

  <?

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

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

      echo "time:$time<br>";

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

      echo "new date:$new_date";

  ?>

3.1.7 定位字符

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

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

 

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

  <?

      $email = "zhangsan@php.net";

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

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

      echo $name;

  ?>

 

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

3.1.8 求串长度

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

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

 

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

  <?

      $email = "zhangsan@php.net";

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

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

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

      echo $email;

  ?>

 

3.1.9 获取ASCII编码

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

PHP字符串操作大集合    string chr(int ascii):把ASCII码转化为字符串。

PHP字符串操作大集合    int ord(string string):把字符串转化为ASCII码。

二者的使用参考下例。

 

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

  <?

      $letter = chr(65);      //A

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

      echo $letter;

      echo   $ascii;

  ?>

 

3.1.10 比较字符

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

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

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

  <?

      $str1="China";

      $str2="Beijing";

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

      echo$i;       //1

  ?>

 

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

3.1.11 大小写转换

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

PHP字符串操作大集合    string strtolower(string str):将str转换为小写形式。

PHP字符串操作大集合    string strtoupper(string string):将str转换为大写形式。

PHP字符串操作大集合    string ucfirst(string str):将str的第一个字符转换为大写形式。

PHP字符串操作大集合    string ucwords(string str):将str中每一个单词的首字母转换为大写形式。

参考下例。

 

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

  <?

      $str1="shandong province";

      $str2="China";   

      $str1=ucwords($str1);

      echo$str1;         //ShangdongProvince   

      $str1=strtoupper($str1);

      echo $str1;        //SHANGDONGPROVINCE   

      $str2=strtolower($str2);

10      echo$str2;         //china

11   ?>

 

3.1.12 小结

字符串是PHP中应用最为广泛的数据类型,其操作也种类繁多。PHP4及以上版本提供了五十多个内置的字符串操作函数,熟练地使用这些函数,是使用PHP的重要内容。本节介绍了其中最为常用的大部分函数,其余未能涉及的部分,请读者在开发或学习过程中参考PHP函数手册。


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值