PHP有一个海量字符串操作库,提供了大约100个分割、连接、解析和搜索文本的功能。在这一点上,PHP的性能是如此地强大以至于在处理字符串相关问题时,判断哪一个是最好的方法会比较困难。本文中我讲了10个通常会用到的字符串处理的解决方案。
1. 判定字符串长度
到目前为止,这是本文中展示的最简单的例子,以至于我差点忽略掉它。
$text = “sunny day”;
$count = strlen($text);
// $count = 9
2. 截短文本做成摘要形式
以新闻为主的网站通常会把每篇文章的前200个左右的字符提取出来并在被截短的字符串后边加上省略符号生成一个新闻摘要。可以用substr_replace()函数实现这个功能。由于空间的原因,我将用一个截取40个字母的例子来论证这个效果。
$article = "BREAKING NEWS: In ultimate irony, man bites dog.";
$summary = substr_replace($article, "...", 40);
// $summary = "BREAKING NEWS: In ultimate irony, man bi..."
3. 计算字符串中的单词数量
经常可以看到博客或者以新闻为主的站点统计一篇文章的字数或者要求发布文章的人在一个预先定义的字数范围内发表文章。你可以用str_word_count()函数实现统计单词数量的功能。
$article = "BREAKING NEWS: In ultimate irony, man bites dog.";
$wordCount = str_word_count($article);
// $wordCount = 8
如果你想统计某个字符串中的字符数量,可以用count_chars()函数;
4. 解析CSV文件
文件中的数据通常会用CSV格式存放。CSV用逗号或者类似的预定义的定界符来分割每一列。通常是建立一个PHP脚本来导入数据,并解析或者处理成你所需要的。多年以来,我见过很多不同的解析CSV文件的方法,最常用的是用fgets()函数和explode()函数联合起来读取并解析文件。但是,最容易的办法是调用一个并没用被划分到PHP字符串处理库的一个函数:fgetcsv()。无论是逗号分隔符还是别的分隔符,都可以用这个函数来控制输出。
例如下面的文件:
1,John,Smith,Plumber
2,Mark,Seagal,Instructor
3,Peter,Haines,Writer
用fopen()和fgetcsv(),可以比较容易地解析文件并检索到每一组联系人的第一个名字。
$fh = fopen(“contacts.csv”, “r”);
while($line = fgetcsv($fh, 1000, “,”)) { echo “Contact: {$line[1]} “; }
5. 将数组转换成字符串
某些特定的场合,你可能需要建立一个CSV文件并读取它的内容。意味着你需要将数据转换成用逗号分割的字符串格式。如果这个数据是从数据库里检索到的,可能会以数组的方式呈现在你面前。你可以利用implode()函数将数组转换成用逗号分割的字符串格式。
$csv = implode(“,”, $record);
6. 将URL转换成超链接
许多所见即所得编辑器(WYSIWYG editors)提供了一个工具栏,允许用户的文本中包含超链接。当内容已经提交到页面上时可以自动地实现这个过程,减少了发布者的不变和出现错误的机会。preg_replace()函数可以实现将URL转换成超链接的功能,它能够根据一个已定义好URL结构的正则表达式来搜索字符串并进行替换。
$url = "W.J. Gilmore, LLC (http://www.wjgilmore.com)";
$url = preg_replace("/http://([A-z0-9./-]+)/", "$0", $url);
// $url = "W.J. Gilmore, LLC
7. 从字符串中移除HTML标签
作为一个web开发人员,确保用户的输入不包含潜在危险的数据,这些数据可以造成SQL注入或跨站脚本攻击是一项重要的任务。PHP语言包含了大量的与安全相关的性能,可以帮助你过滤数据。你只是希望对用户的输入添加一点额外的控制而不是采取一个“焦土策略”的办法。(scorched earth:焦土策略。例如:军队撤退时销毁一切敌军可利用之物)例如:你允许用户在他们的评论里输入一些简单的HTML(比如一个标签),可以用strip_tags()函数检查进行,这个函数不但可以默认地从一个字符串中移除所有的HTML标签,而且允许你重写默认值并指定某个标签是允许使用的。举个例子,可以用下面的语句去掉所有除了“and”以外的标签:
$text = strip_tags($input, " ");
8. 比较两个字符串
比较两个字符串确保它们是一样的。例如:在用户输入密码及确认密码的时候,我们可以用substr_compare()函数来比较。
$pswd = "secret";
$pswd2 = "secret";
if (! strcmp($pswd, $pswd2)) { echo "The passwords are not identical!"; }
如果在比较两个字符串的时候不区分大小写,可以用strcasecmp()函数。
9. 将换行符转换成换行标签
用到的函数是:nl2br();
例子:
<?php
echo nl2br("foo isn'tn bar");
?>
输出结果是:foo isn't<br /> bar
10. 自适应换行
用到的函数是:wordwrap();
例子:
<?php
$text = "The quick brown fox jumped over the lazy dog.";
$newtext = wordwrap($text, 20, "<br />n");
echo $newtext;
?>
输出结果是:
The quick brown fox<br />
jumped over the lazy<br />
dog.
小结:
本文所讲的内容只是PHP处理字符串中的很小的一部分。更多处理方法请查看PHP文档。