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文档

10种处理PHP字符串的措施的更多相关文章

  1. Microsoft.VisualBasic.dll的妙用and 改善C#公共程序类库质量的10种方法

    Microsoft.VisualBasic.dll的妙用(开发中肯定会用到哦) 前言 做过VB开发的都知道,有一些VB里面的好的函数在.NET里面都没有,而Microsoft.VisualBasic. ...

  2. Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典 各种数据类型的的xx重写xx表达式

    Python第三天 序列  5种数据类型  数值  字符串  列表  元组  字典 各种数据类型的的xx重写xx表达式 目录 Pycharm使用技巧(转载) Python第一天  安装  shell ...

  3. 利用Linux系统生成随机密码的10种方法【转】

    Linux操作系统的一大优点是对于同样一件事情,你可以使用高达数百种方法来实现它.例如,你可以通过数十种方法来生成随机密码.本文将介绍生成随机密码的十种方法. 1. 使用SHA算法来加密日期,并输出结 ...

  4. Linux下命令行cURL的10种常见用法示例

    curl的命令行工具功能非常强大,这些数据交互的功能基本上都是通过URL方式进行的,下面这篇文章主要给大家分享了在Linux中命令行cURL的10种常见用法示例,通过示例代码介绍的非常详细,需要的朋友 ...

  5. 【转】10种简单的Java性能优化

    10种简单的Java性能优化 2015/06/23 | 分类: 基础技术 | 14 条评论 | 标签: 性能优化 分享到: 本文由 ImportNew - 一直在路上 翻译自 jaxenter.欢迎加 ...

  6. 一篇文章带你编写10种语言HelloWorld

    0,编程语言排行榜 计算机编程语言众多,世界上大概有600 多种编程语言,但是流行的也就几十种.我们来看下编程语言排行榜,下面介绍两种语言排行榜. Ⅰ TIOBE 指数 该指数每月更新一次,它监控了近 ...

  7. 016 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 10 布尔类型和字符串的字面值

    016 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 10 布尔类型和字符串的字面值 本文知识点:字面值 关于字面值的概念,需要注意:很多地方,我们可能就把字面值 ...

  8. 支持10种格式的 HTML 表格导出 jQuery 插件

    HTML 表格导出 jQuery 插件可以帮助用户导出 HTML 表格到 JSON.XML.PNG.CSV.TXT.SQL.MS-Word.MS-Excel.MS-PowerPoint 和 PDF 格 ...

  9. 让C程序更高效的10种方法(转)

    原文:http://blog.jobbole.com/1198/ 代码之美,不仅在于为一个给定问题找到解决方案,而且还在代码的简单性.有效性.紧凑性和效率(内存).代码设计比实际执行更难 .因此,每一 ...

随机推荐

  1. android的m、mm、mmm编译命令的使用

    android的m.mm.mmm编译命令的使用   android源码目录下的build/envsetup.sh文件,描述编译的命令 - m:       Makes from the top of ...

  2. SQL Server 2008登录问题(错误 233和18456)解决方法

    今天使用 SQLSERVER2008 先遇到了233 错误,后又遇到了 18456 ,从网上找到了解决方法,具体如下: 问题一 : 已成功与服务器建立连接,但是在登录过程中发生错取.(provider ...

  3. The Wall (medium)

    The Wall (medium) Heidi the Cow is aghast: cracks in the northern Wall? Zombies gathering outside, f ...

  4. 阶乘相关<同余与模算术>

    题意: 题目很简明: 令S[n]=1*1!+2*2!+3*3!+4*4!+....+n*n! 求S[n]%10000007 多组测试数据 每组一个n n的范围:1<=n<=1000000 ...

  5. Ubuntu 12.04 中文输入法

    Ubuntu 12.04 中文输入法 [日期:2012-07-28] 来源:Linux社区  作者:lqhbupt [字体:大 中 小]   Ubuntu上的输入法主要有小小输入平台(支持拼音/二笔/ ...

  6. Ubuntu下 Astah professional 6.9 安装

    一,下载astah-professional_6.9.0.b4c6e9-0_all.deb 地址:http://members.change-vision.com/files/astah_profes ...

  7. Mysql(集群)业务水平切割 垂直切割(Amoeba)

     Amoeba原理戳这里:Amoeba详细介绍 需要根据企业 数据业务进行切割,垂直切割又称为纵向切割. 垂直切割通说的说就是有多个表,对表进行分离(用户数据.博客文章数据.照片数据.标签数据类型.群 ...

  8. css3的box-sizing--从此不用担心盒模型的不兼容

    前段时间阿里的面试问了关于盒模型的东西,众所周知,ie和标准盒模型是有着区别的.面试官问有没有什么办法可以改变盒模型的显示效果.答案是css3的box-sizing: 其可以取三个值: 1.值cont ...

  9. jsp显示计算数值, 四舍五入

    <script>document.write(Math.round(<%= rs_MFM.getInt("PVRCompl") %>/<%= rs_M ...

  10. angularJS 系列(一)

    angularJS 中 $scope 的原型 和 原型继承之间的细微差别是什么? 参考:http://stackoverflow.com/questions/14049480/what-are-the ...