文章教程

6.3字符串操作

9/17/2020 9:40:31 PM 人评论 次浏览

6.3 字符串操作

字符串操作主要包括对字符串的格式化处理、连接切分字符串、比较字符串、字符串子串的对比与处理等。

6.3.1 手动和自动转义字符串中的字符

手动转义字符串数据,就是在引号内(包括单引号和双引号)通过使用“\”反斜杠使一些特殊字符转义为普通字符。这个方法在介绍单引号和双引号的时候已经作了详细的描述。

自动转义字符串的字符,是通过PHP的内置函数addslashes()来完成的。还原这个操作则是通过stripslashes()来完成的。以上两个函数,也经常使用在格式化字符串以用于MySQL的数据库存储。

6.3.2 计算字符串的长度

计算字符串的长度经常在很多应用中出现。例如输入框输入文字的多少等,都会用到此功能。这个功能使用strlen()函数就可以实现。通过以下实例介绍计算字符串长度的方法和技巧。

【例6.4】(实例文件:ch06\6.4.php)

  <HTML>
  <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></HEAD>
  <BODY>
  <?php
     $someinput = "这个字符串的长度不长。length is not long.";
     $length = strlen($someinput);
     if(strlen($someinput)>50){
         echo "输入的字符串的长度不能大于50个字符。";
     }else{
         echo "允许输入字符串的长度,此字符串长度为$length";
     }
  ?>
  </BODY>
  </HTML>

运行结果如图6-4所示。

image

图6-4 程序运行结果

【案例分析】

(1)其中$someinput为一个字符串变量。strlen($someinput)则是直接调用strlen()函数计算出字符串的长度。

(2)在if语句中strlen($someinput)返回字符串长度并与50这一上限作比较。由于,$someinput中有中文和英文两种字符,它的长度为41,正如输出所示。

(3)由于每个中文字占两个字符位,每个英文字符占一个字符位,字符串内的每个空格也算一个字符位,所以,最后字符串的长度为41个字符。

6.3.3 字符串单词统计

有的时候对字符串的单词进行统计有更大意义。使用str_word_count()函数可以实现此操作,但是这个函数只对基于ASCII码的英文单词起作用,并不对utf8的中文字符起作用。

下面通过实例介绍字符串单词统计中的应用和技巧。

【例6.5】(实例文件:ch06\6.5.php)

  <HTML>
  <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></HEAD>
  <BODY>
  <?php
     $someinput = "How mang words in this sentance? Just count it.";
     $someinput2 = "这个句子有多少个汉字组成?数一数也不知道。";
     echo str_word_count($someinput)."<br />";
     echo str_word_count($someinput2);
  ?>
  </BODY>
  </HTML>

运行结果如图6-5所示。可见str_word_count()函数无法计算中文字符,查询结果为0。

image

图6-5 程序运行结果

6.3.4 清理字符串中的空格

空格在很多情况下是不必要的,所以清除字符串中的空格显得十分重要。例如,在判定输入是否正确的程序中,出现了不必要的空格,将增大程序出现错误判断的概率。

清除空格要使用到ltrim()、rtrim()和trim()函数。

其中ltrim()是从左边清除字符串头部的空格。rtrim()是从右边清除字符串尾部的空格。trim()则是从字符串两边同时去除头部和尾部的空格。

通过以下实例介绍去除字符串中空格的方法和技巧。

【例6.6】(实例文件:ch06\6.6.php)

  <HTML>
  <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></HEAD>
  <BODY>
  <?php
     $someinput = " 这个字符串的空格有待处理。 ";
     echo "Output:".ltrim($someinput)."End <br />";
     echo "Output:".rtrim($someinput)."End <br />";
     echo "Output:".trim($someinput)."End <br />";
     $someinput2 = " 这个字符串 的 空格有待处理。 ";
     echo "Output:".trim($someinput2)."End";
  ?>
  </BODY>
  </HTML>

运行结果如图6-6所示。

【案例分析】

(1)$someinput为一个两端都有空格的字符串变量。ltrim($someinput)从左边去除空格,rtrim($someinput)从右边去除空格,trim($someinput)从两边同时去除。

(2)$someinput2为一个两端都有空格并且中间也有空格的字符串变量。用trim($someinput2)处理,只去除了两边的空格。

6.3.5 字符串切分与组合

字符串的切分使用explode()和strtok()函数。切分的反向操作为组合,使用implode()和join()函数。

其中explode()把字符串切分成不同部分后,存入一个数组。implode()函数则是把数组中的元素按照一定的间隔标准组合成一个字符串。

以下实例介绍去除字符串切分和组合的方法和技巧。

【例6.7】(实例文件:ch06\6.7.php)

  <HTML>
  <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></HEAD>
  <BODY>
  <?php
     $someinput = "How_to_split_this_sentance.";
     $someinput2 = "把 这个句子 按空格 拆分。";
     $a = explode('_',$someinput);
     print_r($a);
     $b = explode(' ',$someinput2);
     print_r($b);
     echo implode('>',$a)."<br />";
     echo implode('*',$b);
  ?>
  </BODY>
  </HTML>

运行结果如图6-7所示。

image

图6-7 程序运行结果

【案例分析】

(1)explode()函数按照下划线和空格的位置把$someinput和$someinput2分别切分成$a和$b两个数组。

(2)implode()函数把$a和$b两个数组的元素分别按照“>”为间隔和“*”为间隔组合成新的字符串。

6.3.6 字符串子串截取

在一串字符串中截取一个子串,就是字符串截取。

完成这个操作需要使用到substr()函数。这个函数有三个参数,分别规定了目标字符串、起始位置和截取长度。它的格式如下:

  substr(目标字符串,起始位置,截取长度)

其中目标字符串是某个字符串变量的变量名,起始位置和截取长度都是整数。

如果都是正数,起始位置的整数必须小于街区长度的整数,否则函数返回值为假。

如果截取长度为负数,则意味着,是从起始位置开始往后,除去从目标字符串结尾算起的长度数的字符以外的所有字符。

以下实例介绍去除字符串截取的方法和技巧。

【例6.8】(实例文件:ch06\6.8.php)

  <HTML>
  <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></HEAD>
  <BODY>
  <?php
     $someinput = "create a substring of this string.";
     $someinput2 = "创建一个这个字符串的子串。";
     echo substr($someinput,0,11)."<br />";
     echo substr($someinput,1,15)."<br />";
     echo substr($someinput,0,-2)."<br />";
     echo substr($someinput2,0,12)."<br />";
     echo substr($someinput2,0,10)."<br />";
     echo substr($someinput2,0,11);
  ?>
  </BODY>
  </HTML>

运行结果如图6-8所示。

image

图6-8 程序运行结果

【案例分析】

(1)$someinput为英文字符串变量。substr($someinput,0,11)和substr($someinput,1,15)展示了起始位和截取长度。substr($someinput,0,-2)则是从字符串开头算起,除了最后两个字符,其他字符都截取的子字符串。

(2)$someinput2为中文字符串变量。因为中文字符都是全角字符,都占两个字符位。所以截取长度一定要是偶数。如果是单数则在此字符位上的汉字将不被输出。如果在这样截取长度为单数的字符串子串后连接其他字符串输出,会出现输出错误。所以,要小心使用。

6.3.7 字符串子串替换

在某个字符串中替换其中的某个部分是重要的应用,就像在使用文本编辑器中的替换功能一样。

完成这个操作需要使用substr_replace()函数。它的格式为:

  substr_replace(目标字符串,替换字符串,起始位置,替换长度)

以下实例介绍字符串替换的方法和技巧。

【例6.9】(实例文件:ch06\6.9.php)

  <HTML>
  <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></HEAD>
  <BODY>
  <?php
     $someinput = "ID:125846843388648";
     echo substr_replace($someinput,"************",3,11)."<br />";
     echo substr_replace($someinput,"尾号为",3,11);
  ?>
  </BODY>
  </HTML>

运行结果如图6-9所示。

image

图6-9 程序运行结果

【案例分析】

(1)$someinput为英文字符串变量。从第三个字符开始为ID号。第一个输出是以“************”替换第三个字符开始往后的11个字符。

(2)第二个输出是用"尾号为"替代第三个字符开始往后的11个字符。

6.3.8 字符串查找

在一个字符串中查找另外一个字符串,就像文本编辑器中的查找一样。实现这个操作需要使用到strstr()或stristr()函数。strstr()的格式为:

  strstr(目标字符串,需查找字符串)

当函数找到需要查找的字符或字符串,则返回从第一个查找到字符串的位置往后所有的字符串内容。

stristr()函数为不敏感查找,也就是对字符的大小写不敏感。用法与strstr()相同。

以下实例介绍字符串查找的方法和技巧。

【例6.10】(实例文件:ch06\6.1.php)

  <HTML>
  <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></HEAD>
  <BODY>
  <?php
     $someinput = "I have a Dream that to find a string with a dream.";
     $someinput2 = "我有一个梦想,能够找到理想。";
     echo strstr($someinput,"dream")."<br />";
     echo stristr($someinput,"dream")."<br />";
     echo strstr($someinput,"that")."<br />";
     echo strstr($someinput2,"梦想")."<br />";
  ?>
  </BODY>
  </HTML>

运行结果如图6-10所示。

image

图6-10 程序运行结果

【案例分析】

(1)$someinput为英文字符串变量。strstr($someinput,"dream")敏感大小写,所以输出字符串的最后的字符。stristr($someinput,"dream")为不敏感大小写,所以直接在第一个大写的匹配字符就开始输出。

(2)$someinput2为中文字符串变量。strstr()函数同样对中文字符起作用。

教程类别