前面的话

  字符串的处理和分析在任何编程语言中都是一个重要的基础,往往是简单而重要的。信息的分类、解析、存储和显示,以及网络中的数据都需要操作字符串来完成。尤其在web开发中更为重要,程序员大部分工作都是在操作字符串,本文将详细介绍php中的字符串函数

  [注意]关于javascript中字符串的属性和方法移步至此

特点

  因为php是弱类型语言,所以其他类型的数据一般都可以直接应用于字符串操作函数中,而自己转换成字符串类型进行处理

echo substr( "1234567", 2, 4 );  //将字串用函数substr()处理,输出子字符串 345
echo substr( 123456, 2, 4 ); //将整型用字串函数处理,输出同样是字符串 345
echo hello; //先找hello常量,找不到就会将常名看作是字符串使用

  字符串貌似数组,可以使用中括号语法,但由于无法与真正的数组进行区别,带来二义性,所以最好使用功能相同的花括号

$str = "lamp";
echo $str."<br>";
echo $str{0};//输出字符串$str中第一个字符l
echo $str[1];//输出字符串$str中第二个字符a,[]也可以,不过已过时

  在处理变量解析时,如果在字符串中遇到美元符号,解析器会尽可能多地取得后面的字符以组成一个合法的变量名,如果想明确指定名字的结束,用花括号把变量名括起来

    $lamp = array('os'=>'Linux');

    //可以解析
echo "A OS is $lamp[os]."; //不能解析,如果在对关联数组下标使用引号就必须使用花括号,否则将出错
echo "A OS is $lamp['os']."; //可以解析,如果在对关联数组下标使用引号就必须使用花括号,否则将出错
echo "A OS is {$lamp['os']}."; //可以解析,注意PHP将数组下标看作常量名,常量不存在时将常量名称转为字符串,效率低
echo "A OS is {$lamp[os]}.";

  [注意]在php中,一个GB2312编码的汉字占2个字节,一个UTF-8编码的汉字占3个字节

输出

echo()

void echo ( string $arg1 [, string $... ] )

  echo()函数用来输出一个或多个字符串,它会输出所有参数,且不会换行,没有返回值

  echo不是一个函数, 因此不一定要使用小括号来指明参数,单引号,双引号都可以。另外,如果想给echo 传递多个参数,就不能使用小括号

<?php
echo "Hello World";
$foo = "foobar";
echo "foo is $foo"; // foo is foobar
echo $foo; // foobar
?>

print()

int print ( string $arg )

  print()函数用来输出字符串,且总是返回 1

<?php
print("Hello World");
$foo = "foobar";
print "foo is $foo"; // foo is foobar
print $foo; // foobar
?>
var_dump(echo('123'));//报错
var_dump(print('123'));//int 1

  echo可以接受多个参数(不可以加括号),而print不可以

<?php
echo '1','2','3';//
print 'a','b','c';//报错
?>

exit()

  exit()函数用来输出一个消息并且退出当前脚本,没有返回值,同名函数为die()

void exit ([ string $status ] )
void exit ( int $status )

  如果 status 是一个字符串,在退出之前该函数会打印status;如果 status 是一个 integer,该值会作为退出状态码,并且不会被打印输出。退出状态码应该在范围0至254,不应使用被PHP保留的退出状态码255。 状态码0用于成功中止程序

<?php
exit('0');//
exit(0);//无返回值
?>

printf

  printf()函数用于输出格式化字符串

int printf ( string $format [, mixed $args [, mixed $... ]] )

sprintf

  sprintf()函数用于把格式化的字符串写入一个变量中

string sprintf ( string $format [, mixed $args [, mixed $... ]] )

  字符串转换格式如下

%%    返回百分比符号
%b 二进制数
%c 依照ASCII值的字符
%d 带符号十进制数
%e 科学计数法(如1.5e3)
%u 无符号十进制数
%f或%F 浮点数
%o 八进制数
%s 字符串
%x或%X 十六进制数
<?php
$var = 10;
printf("%%,%b,%c,%d,%e,%u,%o,%f,%s,%x",$var,$var,$var,$var,$var,$var,$var,$var,$var,$var);//%,1010, ,10,1.000000e+1,10,12,10.000000,10,a
$result = sprintf("%%,%b,%c,%d,%e,%u,%o,%f,%s,%x",$var,$var,$var,$var,$var,$var,$var,$var,$var,$var);
var_dump($result);//string '%,1010, ,10,1.000000e+1,10,12,10.000000,10,a' (length=44)
?>

  上面的两个函数不仅可以设置转换类型,还可以设置精确度、填充符和对齐方式

%   将结果填充到15位
%.   将结果保留小数点后两位
%#   在结果前面填充#号
%-   左对齐
printf("%'#10.3f",);//###123.000
printf("%10.3f",);// 123.000(右对齐)
printf("%-10.3f",);//123.000 (左对齐)

空格

trim()

  trim()函数用于去除字符串首尾处的空白字符(或者其他字符),过滤后的字符串

string trim ( string $str [, string $charlist = " \t\n\r\0\x0B" ] )

  此函数返回字符串str去除首尾空白字符后的结果。如果不指定第二个参数,trim() 将去除这些字符:

" " (ASCII 32 (0x20)),普通空格符
"\t" (ASCII 9 (0x09)),制表符
"\n" (ASCII 10 (0x0A)),换行符
"\r" (ASCII 13 (0x0D)),回车符
"\0" (ASCII 0 (0x00)),空字节符
"\x0B" (ASCII 11 (0x0B)),垂直制表符

  charlist为可选参数,过滤字符也可由charlist参数指定。一般要列出所有希望过滤的字符,也可以使用 “..” 列出一个字符范围

ltrim()

  ltrim函数用于删除字符串开头的空白字符(或其他字符)

rtrim()

  rtrim函数用于删除字符串末端的空白字符(或者其他字符) 

<?php
$text = " \t\tHello World a1a1a1 ";
$trimmed = trim($text);
var_dump($trimmed);//string 'Hello World a1a1a1' (length=18) $trimmed = trim($text, "a1 ");
var_dump($trimmed);//string ' Hello World' (length=13) $trimmed = trim($text, "1..e ");//string ' Hello Worl' (length=12)
var_dump($trimmed); $ltrimmed = ltrim($text);
var_dump($ltrimmed);//string 'Hello World a1a1a1 ' (length=22) $rtrimmed = rtrim($text);
var_dump($rtrimmed);//string ' Hello World a1a1a1' (length=23)
?>

str_pad()

  str_pad()函数使用另一个字符串填充字符串为指定长度

string str_pad ( string $input , int $pad_length [, string $pad_string = " " [, int $pad_type = STR_PAD_RIGHT ]] )

  该函数返回input被从左端、右端或者同时两端被填充到制定长度后的结果。如果可选的 pad_string 参数没有被指定,input 将被空格字符填充,否则它将被 pad_string 填充到指定长度

  [注意]如果pad_length的值是负数,小于或者等于输入字符串的长度,不会发生任何填充

<?php
$input = "Alien";
echo str_pad($input, 10); // 输出 "Alien "
echo str_pad($input, 10, "-=", STR_PAD_LEFT); // 输出 "-=-=-Alien"
echo str_pad($input, 10, "_", STR_PAD_BOTH); // 输出 "__Alien___"
echo str_pad($input, 6 , "___");// 输出 "Alien_"
?>

大小写

strtolower()

  strtolower — 将字符串转化为小写

strtoupper()

  strtoupper — 将字符串转化为大写

ucfirst()

  ucfirst — 将字符串的首字母转换为大写

ucwords()

  ucwords — 将字符串中每个单词的首字母转换为大写

<?php
$foo = 'hello world!';
var_dump(ucwords($foo));//string 'Hello World!' (length=12)
var_dump(ucfirst($foo));//string 'Hello world!' (length=12)
var_dump(strtoupper($foo));//string 'HELLO WORLD!' (length=12)
var_dump(strtolower($foo));//string 'hello world!' (length=12)
?>

HTML

nl2br()

  nl2br — 在字符串所有新行之前插入 HTML 换行标记

string nl2br ( string $string [, bool $is_xhtml = true ] )
<?php
/*
foo isn't<br />
bar
*/
echo nl2br("foo isn't\n bar");
?>

htmlspecialchars()

string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )

  htmlspecialchars - 把指定特殊符号转换成实体

& (ampersand)            &amp;
" (double quote) &quot;, unless ENT_NOQUOTES is set
' (single quote) ' or &apos;
< (less than) &lt;
> (greater than) &gt;
<?php
$new ="<script>alert(1)</script>";
echo $new;//弹出1
$new = htmlspecialchars("<script>alert(1)</script>");
echo $new; //显示字符串"<script>alert(1)</script>"
?>
<?php
$str = "<B>WebServer:</B> & 'Linux' & 'Apache'";//常有HTML标记和单引号的字符串
echo htmlspecialchars($str, ENT_COMPAT);//转换HTML标记和转换双引号
echo "<br>\n";
echo htmlspecialchars($str, ENT_QUOTES);//转换HTML标记和转换两种引号
echo "<br>\n";
echo htmlspecialchars($str, ENT_NOQUOTES);//转换HTML标记和不对引号转换
?>

htmlentities()

string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )

  htmlentities - 将所有的非ASCII码转换成对应实体代码

  htmlentities()和htmlspecialchars()的功能都是转换字符为HTML字符编码,特别是url和代码字符串,防止字符标记被浏览器执行。htmlentities转换所有的html标记,htmlspecialchars只格式化& ' " < 和 > 这几个特殊符号

<?php
$str = "<p>123</p>";
echo $str;//显示段落123
echo htmlentities($str);//'123'
echo htmlspecialchars($str);//'123'
?>

strip_tags()

  strip_tags — 尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果

string strip_tags ( string $str [, string $allowable_tags ] )

  使用可选的第二个参数allowable_tags指定不被去除的字符列表

<?php
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);//'Test paragraph. Other text'
echo "\n";
echo strip_tags($text, '<p>').'<br>';//<p>Test paragraph.</p> Other text
$text = '<div><b>123</b></div>';
echo strip_tags($text);//'123'
?>

addslashes()

  addslashes — 使用反斜线引用字符串,返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)

string addslashes ( string $str )
<?php
$str = "Is your name O'reilly?";
echo addslashes($str);// "Is your name O\'reilly?"
?>

stripslashes()

  stripslashes — 反引用一个引用字符串

string stripslashes ( string $str )
<?php
$str = "Is your name O\'reilly?";
echo stripslashes($str);//"Is your name O'reilly?"
?>

格式化

strrev()

  strrev — 反转字符串

string strrev ( string $string )
<?php
echo strrev("Hello world!"); // 输出 "!dlrow olleH"
?>

strlen()

  strlen — 获取字符串长度

int strlen ( string $string )
<?php
$str = 'abcdef';
echo strlen($str); // $str = ' ab cd ';
echo strlen($str); //
?>

md5()

  md5 — 计算字符串的 MD5 散列值

string md5 ( string $str [, bool $raw_output = false ] )

  如果可选的raw_output被设置为TRUE,那么MD5报文摘要将以16字节长度的原始二进制格式返回

<?php
$str = 'apple';
if (md5($str) === '1f3870be274f6c49b3e31a0c6728957f') {
echo "Would you like a green or red apple?";
}
?>

比较

strcmp()

  strcmp — 字符串比较,如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0

int strcmp ( string $str1 , string $str2 )
<?php
$var1 = "Hello";
$var2 = "hello";
if (strcmp($var1, $var2) !== 0) {
echo '$var1 is not equal to $var2 in a case sensitive string comparison';
}
?>

strncmp()

  strncmp — 限定字符串长度的字符串比较

int strncmp ( string $str1 , string $str2 , int $len )

  如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0

<?php
echo strncmp("xybc","a3234",0); // 0
echo strncmp("xybc","a3234",1); // 1
?>

strcasecmp()

  strcasecmp — 字符串比较(不区分大小写),如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0

int strcasecmp ( string $str1 , string $str2 )
<?php
$var1 = "Hello";
$var2 = "hello";
if (strcasecmp($var1, $var2) == 0) {
echo '$var1 is equal to $var2 in a case-insensitive string comparison';
}
?>

strnatcmp()

  strnatcmp — 使用自然排序算法比较字符串

int strnatcmp ( string $str1 , string $str2 )

  如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0

<?php
$arr1 = $arr2 = array("img12.png", "img10.png", "img2.png", "img1.png");
usort($arr1, "strcmp");
print_r($arr1);//Array ( [0] => img1.png [1] => img10.png [2] => img12.png [3] => img2.png )
usort($arr2, "strnatcmp");//Array ( [0] => img1.png [1] => img2.png [2] => img10.png [3] => img12.png )
print_r($arr2);
?>

位置

strstr()

  strstr()查找字符串的首次出现,返回haystack字符串从needle第一次出现的位置开始到haystack结尾的字符串

string strstr ( string $haystack , mixed $needle [, bool $before_needle = false ] )

  before_needle若为TRUE,strstr()将返回needle在haystack中的位置之前的部分

<?php
$email = 'name@example.com';
$domain = strstr($email, '@');
echo $domain; // @example.com $user = strstr($email, '@', true);
echo $user; //name
?>

strpos()

  strpos()查找字符串首次出现的位置

mixed strpos ( string $haystack , mixed $needle [, int $offset =  ] )
<?php
// 忽视位置偏移量之前的字符进行查找
$newstring = 'abcdef abcdef';
$pos = strpos($newstring, 'a', ); // $pos = 7, 不是 0
?>

strrpos()

  strrpos()计算指定字符串在目标字符串中最后一次出现的位置

int strrpos ( string $haystack , string $needle [, int $offset =  ] )
<?php
$foo = "0123456789a123456789b123456789c"; var_dump(strrpos($foo, '', -)); // 从尾部第 5 个位置开始查找
// 结果: int(17) var_dump(strrpos($foo, '', )); // 从第 20 个位置开始查找
// 结果: int(27) var_dump(strrpos($foo, '', )); // 结果: bool(false)
?>

子串

substr()

  substr()返回字符串的子串

string substr ( string $string , int $start [, int $length ] )
<?php
$rest = substr("abcdef", -); // 返回 "f"
$rest = substr("abcdef", -); // 返回 "ef"
$rest = substr("abcdef", -, ); // 返回 "d"
?> <?php
$rest = substr("abcdef", , -); // 返回 "abcde"
$rest = substr("abcdef", , -); // 返回 "cde"
$rest = substr("abcdef", , -); // 返回 ""
$rest = substr("abcdef", -, -); // 返回 "de"
?>

替换

str_replace()

  str_replace()返回一个字符串或者数组。该字符串或数组是将 subject 中全部的 search 都被 replace 替换之后的结果

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

  如果count被指定,它的值将被设置为替换发生的次数

<?php
// 赋值: <body text='black'>
$bodytag = str_replace("%body%", "black", "<body text='%body%'>"); // 赋值: Hll Wrld f PHP
$vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$onlyconsonants = str_replace($vowels, "", "Hello World of PHP"); // 赋值: You should eat pizza, beer, and ice cream every day
$phrase = "You should eat fruits, vegetables, and fiber every day.";
$healthy = array("fruits", "vegetables", "fiber");
$yummy = array("pizza", "beer", "ice cream"); $newphrase = str_replace($healthy, $yummy, $phrase); // 赋值: 2
$str = str_replace("ll", "", "good golly miss molly!", $count);
echo $count;
?>

分割

【explode()】

  explode()使用一个字符串分割另一个字符串,返回由字符串组成的数组,每个元素都是string的一个子串,它们被字符串delimiter作为边界点分割出来

array explode ( string $delimiter , string $string [, int $limit ] )

  如果设置了limit参数并且是正数,则返回的数组包含最多limit个元素,而最后那个元素将包含string的剩余部分;如果limit参数是负数,则返回除了最后的-limit个元素外的所有元素;如果limit是0,则会被当做1

<?php
// 示例 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[]; // piece1
echo $pieces[]; // piece2 // 示例 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
echo $user; // foo
echo $pass; // *
?>

【implode()】

  implode()将一个一维数组的值转化为字符串

string implode ( string $glue , array $pieces )
string implode ( array $pieces )
<?php

$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array); echo $comma_separated; // lastname,email,phone // Empty string when using an empty array:
var_dump(implode('hello', array())); // string(0) "" ?>

前端学PHP之字符串函数的更多相关文章

  1. 前端学PHP之数组函数

    × 目录 [1]键值操作 [2]记数[3]回调函数[4]组合[5]栈和队列[6]顺序 前面的话 PHP中的数组功能非常强大,数组处理函数有着强大.灵活.高效的特点.PHP5提供了近100个操作数组的系 ...

  2. 前端学PHP之正则表达式函数

    前面的话 正则表达式不能独立使用,它只是一种用来定义字符串的规则模式,必须在相应的正则表达式函数中应用,才能实现对字符串的匹配.查找.替换及分割等操作.前面介绍了正则表达式的基础语法,本文将详细介绍正 ...

  3. Hive学内置条件和字符串函数

    https://blog.csdn.net/skywalker_only/article/details/38752003 条件函数 下表为Hive支持的一些条件函数. 返回类型 函数名 描述 T i ...

  4. 前端入门12-JavaScript语法之函数

    声明 本系列文章内容全部梳理自以下几个来源: <JavaScript权威指南> MDN web docs Github:smyhvae/web Github:goddyZhao/Trans ...

  5. ThinkPHP 模板substr的截取字符串函数

    ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码 /** ** 截取中文字符串 **/ function msubstr($str, $start ...

  6. Python学习入门教程,字符串函数扩充详解

    因有用户反映,在基础文章对字符串函数的讲解太过少,故写一篇文章详细讲解一下常用字符串函数.本文章是对:程序员带你十天快速入门Python,玩转电脑软件开发(三)中字符串函数的详解与扩充. 如果您想学习 ...

  7. js进阶js中支持正则的四个常用字符串函数(search march replace split)

    js进阶js中支持正则的四个常用字符串函数(search march replace split) 一.总结 代码中详细四个函数的用法 search march replace split 二.js进 ...

  8. Python的字符串函数

    今天用了将近一天的时间去学习Python字符串函数 上午学了17个,下午学了23个(共计40) 详细内容请见菜鸟教程--Python3字符串--Python的字符串内建函数

  9. SQL字符串函数

    LEN() :计算字符串长度(字符的个数.)datalength();//计算字符串所占用的字节数,不属于字符串函数.测试varchar变量与nvarchar变量存储字符串a的区别.见备注1.LOWE ...

随机推荐

  1. C#委托与事件初探

    最近刚刚接触C#,学到事件与委托部分无法理解,于是上网查阅了各种资料,终于明白了一些,在此进行总结. 一.C语言中的函数指针 想要理解什么是委托,就要先理解函数指针的概念.所谓函数指针,就是指向函数的 ...

  2. Where product development should start

    We all need to know our customers in order to create products they’ll actually buy. This is why the  ...

  3. win2003+sql2005配置

    1.安装win2003+sp1 2.安装IIS: a.启用Asp支持(2003 默认安装不安装IIS 6 ,需另外安装.安装完IIS 6,需单独开启ASP支持) 控制面板 -> 管理工具 -&g ...

  4. python pickle和json的区别

    pickle可以在python之间进行交互 json可以实现python与不同开发语言的交互 pickle可以序列化python中的任何数据类型 json只能序列化python中的常归数据类型(列表等 ...

  5. 使用nodeJs安装Vue-cli

    TIP:win10下安装,使用管理员身份进行,否则会有权限限制. 1,安装完成node,node有自带的npm,可以直接在cmd中,找到nodeJs安装的路径下,进行命令行全局安装vue-cli.(n ...

  6. spark 你要喧宾夺主么?好好干。

    嗯嗯,hadoop EcoSystem.

  7. MYSQL 5.0 USING BTREE 错误

    今天遇到个错误,导入数据库的时候报错,最后发现是php版本的问题导致包含 KEY `uniacid` (`uniacid`) USING BTREE 的SQL命令报错 5.1之前的写法: KEY `u ...

  8. 浏览器地址栏输入一个URL后回车,将会发生的事情

    浏览器向DNS服务器查找输入URL对应的IP地址. DNS服务器返回网站的IP地址. 浏览器根据IP地址与目标web服务器在80端口上建立TCP连接 浏览器获取请求页面的html代码. 浏览器在显示窗 ...

  9. angurlarjs学习笔记

    AngularJS 根作用域($rootScope) 所有的应用都有一个 $rootScope,它可以作用在 ng-app 指令包含的所有 HTML 元素中 $rootScope 可作用于整个应用中. ...

  10. javascript中的内置对象总结

    内置对象 标准内置对象 Object Object.create Object.prototype.toString Object.prototype.hasOwnProperty Boolean S ...