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. backBarButtonItem无效

    控制器A push-> 控制器B, 我设置了B的backBarButtonItem为“返回”,发现无效... 原因: 应该在控制器A中设置backBarButtonItem,这样在push B之 ...

  2. 核心动画 CAAnimation 进阶

    转载自:http://www.cofcool.net/development/2015/06/20/ios-study-note-nine-CoreAnimation/ Core Animation, ...

  3. Activity与Service之间交互并播放歌曲的实现代码

    Activity与Service之间交互并播放歌曲,为了方便,我把要播放的歌曲定死了,大家可以灵活改进 MService: 复制代码代码如下: package com.tiantian.test;im ...

  4. Android程序两种退出的方法

    两种程序退出的方法: Context的finish()方法: android.os.Process的killProcess()方法:(当程序isRegistered()失败,说明程序被修改过,调用ki ...

  5. JS——无缝滚动

    1.描述——无缝滚动图片 2.代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  6. jar2exe 配置jre

    http://www.regexlab.com/zh/jar2exe/support.htm

  7. ICE第二篇--一个"hello world"的简单例子

    1 本文介绍一个hello world输出的例子. ice应用的步骤如下: 1. 编写 Slice 定义并编译它. 2. 编写服务器并编译它. 3. 编写客户并编译它. 基本框架图示: 本文代码图示: ...

  8. Hibernate---O/R Mapping

    1. JDBC数据库繁琐 2. sql语句不是面向对象 3. 可以在对象和关系表之间建立关联简化编程 4. O/R Mapping可以简化编程, 跨越数据库平台 比较流行的O/R Mapping Fr ...

  9. Spring MVC之Action返回类型

    Spring MVC支持的方法返回类型 1)ModelAndView 对象.包含Model和View对象,可以通过它访问@ModelAttribute注解的对象. 2)Model 对象.仅包含数据访问 ...

  10. golang中container/heap包源码分析

    学习golang难免需要分析源码包中一些实现,下面就来说说container/heap包的源码 heap的实现使用到了小根堆,下面先对堆做个简单说明 1. 堆概念 堆是一种经过排序的完全二叉树,其中任 ...