前端学PHP之字符串函数

Posted 不动如山岳 难如知阴阳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端学PHP之字符串函数相关的知识,希望对你有一定的参考价值。

 

前面的话

  字符串的处理和分析在任何编程语言中都是一个重要的基础,往往是简单而重要的。信息的分类、解析、存储和显示,以及网络中的数据都需要操作字符串来完成。尤其在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\';//123
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\');//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)
?>
复制代码

 

空格

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)        &#039; 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); // 6

$str = \' ab cd \';
echo strlen($str); // 7
?>
复制代码

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);
?>
转发自:http://www.cnblogs.com/xiaohuochai/

以上是关于前端学PHP之字符串函数的主要内容,如果未能解决你的问题,请参考以下文章

前端学PHP之字符串函数

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

前端学PHP之面向对象系列第二篇——魔术方法

前端学PHP之面向对象系列第二篇——魔术方法

前端学PHP之数组函数

前端学PHP之mysql扩展函数