PHP面试知识复习(七):系统内置函数——常用字符串函数

删除两端空格

trim

去除字符串首尾处的空白字符(或者其他字符)

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

返回去除首尾空白字符后的结果,如果不指定第二个参数,将去除以下字符:

  • “ “ (ASCII 32 (0x20)),普通空格符。
  • “\t” (ASCII 9 (0x09)),制表符。
  • “\n” (ASCII 10 (0x0A)),换行符。
  • “\r” (ASCII 13 (0x0D)),回车符。
  • “\0” (ASCII 0 (0x00)),空字节符。
  • “\x0B” (ASCII 11 (0x0B)),垂直制表符。
1
2
3
<?php
echo trim(" Hello World "); // "Hello World"
?>

ltrim

去除字符串开头处的空白字符(或者其他字符)

1
string ltrim(string $str[, $character_mask = "\t\n\r\0x0B"])

返回去除开头空白字符后的结果,处理方式同trim()

1
2
3
<?php
echo ltrim(" Hello World "); // "Hello World "
?>

rtrim

去除字符串结尾处的空白字符(或者其他字符)

1
string rtrim(string $str[, $character_mask = "\t\n\r\0x0B"])

返回去除结尾空白字符后的结果,处理方式同trim()

1
2
3
<?php
echo rtrim(" Hello World "); // " Hello World"
?>

大小写

strtolower

将字符串转化为小写

1
string strtolower(string $string)

string所有字母转换为小写后返回

1
2
3
<?php
echo strtolower('Hello World'); // hello world
?>

strtoupper

将字符串转化为大写

1
string strtoupper(string $string)

string所有字母转换为大写后返回

1
2
3
<?php
echo strtoupper('Hello World'); // HELLO WORLD
?>

ucfirst

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

1
string ucfirst(string $str)

返回首字母为大写的字符串

1
2
3
<?php
echo ucfirst('hello world'); // Hello world
?>

ucwords

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

1
string ucwords(string $str)

返回每个单词中首字母为大写的字符串

1
2
3
<?php
echo ucwords('hello world'); // Hello World
?>

HTML相关

htmlentities

将字符转换为HTML转义字符

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

返回将所有具有HTML实体的字符转换后的字符串

参数

string

输入字符

flags

以下一组位掩码标记,用于设置如何处理引号、无效代码序列、使用文档的类型。 默认是 ENT_COMPAT | ENT_HTML401

常量名描述
ENT_COMPAT会转换双引号,不转换单引号。
ENT_QUOTES既转换双引号也转换单引号。
ENT_NOQUOTES单/双引号都不转换
ENT_IGNORE静默丢弃无效的代码单元序列,而不是返回空字符串。 不建议使用此标记, 因为它» 可能有安全影响。
ENT_SUBSTITUTE替换无效的代码单元序列为 Unicode 代替符(Replacement Character), U+FFFD (UTF-8) 或者 &#xFFFD; (其他),而不是返回空字符串。
ENT_DISALLOWED为文档的无效代码点替换为 Unicode 代替符(Replacement Character): U+FFFD (UTF-8),或 &#xFFFD;(其他),而不是把它们留在原处。 比如以下情况下就很有用:要保证 XML 文档嵌入额外内容时格式合法。
ENT_HTML401以 HTML 4.01 处理代码。
ENT_XML1以 XML 1 处理代码。
ENT_XHTML以 XHTML 处理代码。
ENT_HTML5以 HTML 5 处理代码。
encoding

默认编码与PHP版本有关

  • PHP5.6以后,使用default_charset配置
  • PHP5.4和PHP5.5,使用UTF-8
  • 更早,使用ISO-8859-1

支持以下字符集

字符集别名描述
ISO-8859-1ISO8859-1西欧,Latin-1
ISO-8859-5ISO8859-5Little used cyrillic charset (Latin/Cyrillic).
ISO-8859-15ISO8859-15西欧,Latin-9。增加欧元符号,法语和芬兰语字母在 Latin-1(ISO-8859-1) 中缺失。
UTF-8ASCII 兼容的多字节 8 位 Unicode。
cp866ibm866, 866DOS 特有的西里尔编码。本字符集在 4.3.2 版本中得到支持。
cp1251Windows-1251, win-1251, 1251Windows 特有的西里尔编码。本字符集在 4.3.2 版本中得到支持。
cp1252Windows-1252, 1252Windows 特有的西欧编码。
KOI8-Rkoi8-ru, koi8r俄语。本字符集在 4.3.2 版本中得到支持。
BIG5950繁体中文,主要用于中国台湾省。
GB2312936简体中文,中国国家标准字符集。
BIG5-HKSCS繁体中文,附带香港扩展的 Big5 字符集。
Shift_JISSJIS, 932日语
EUC-JPEUCJP日语
MacRomanMac OS 使用的字符串。
double_encode

关闭 double_encode 时,PHP 不会转换现有的 HTML 实体, 默认是全部转换。

返回值

返回编码后的字符。

如果指定的编码 encoding 里, string 包含了无效的代码单元序列, 没有设置 ENT_IGNORE 或者 ENT_SUBSTITUTE 标记的情况下,会返回空字符串。

用法

1
2
3
4
5
6
<?php
$str = "A 'quote' is <b>bold</b>";

echo htmlentities($str); // A 'quote' is &lt;b&gt;bold&lt;/b&gt;
echo htmlentities($str, ENT_QUOTES); // A &#039;quote&#039; is &lt;b&gt;bold&lt;/b&gt;
?>

html_entity_decode

将字符串中的HTML实体转换为相应的字符

1
string html_entity_decode(string $string[, int $flags = ENT_COMPAT | ENT_HTML401[, string $encoding = ini_get("default_charset")]])

参数

string

输入的字符串

flags
常量名说明
ENT_COMPAT转换双引号,不转换单引号。
ENT_QUOTES单引号和双引号都转换。
ENT_NOQUOTES单引号和双引号都不转换。
ENT_HTML401作为HTML 4.01编码处理。
ENT_XML1作为XML 1编码处理。
ENT_XHTML作为XHTML编码处理。
ENT_HTML5作为HTML 5编码处理。
encoding

默认编码与PHP版本有关

  • PHP5.6以后,使用default_charset配置
  • PHP5.4和PHP5.5,使用UTF-8
  • 更早,使用ISO-8859-1

支持以下字符集

字符集别名描述
ISO-8859-1ISO8859-1西欧,Latin-1
ISO-8859-5ISO8859-5Little used cyrillic charset (Latin/Cyrillic).
ISO-8859-15ISO8859-15西欧,Latin-9。增加欧元符号,法语和芬兰语字母在 Latin-1(ISO-8859-1) 中缺失。
UTF-8ASCII 兼容的多字节 8 位 Unicode。
cp866ibm866, 866DOS 特有的西里尔编码。本字符集在 4.3.2 版本中得到支持。
cp1251Windows-1251, win-1251, 1251Windows 特有的西里尔编码。本字符集在 4.3.2 版本中得到支持。
cp1252Windows-1252, 1252Windows 特有的西欧编码。
KOI8-Rkoi8-ru, koi8r俄语。本字符集在 4.3.2 版本中得到支持。
BIG5950繁体中文,主要用于中国台湾省。
GB2312936简体中文,中国国家标准字符集。
BIG5-HKSCS繁体中文,附带香港扩展的 Big5 字符集。
Shift_JISSJIS, 932日语
EUC-JPEUCJP日语
MacRomanMac OS 使用的字符串。

返回值

转HTML实体为字符后的字符串

使用

1
2
3
4
5
6
7
8
9
10
11
<?php
$orig = "I'll \"walk\" the <b>dog</b> now";

$a = htmlentities($orig);

$b = html_entity_decode($a);

echo $a; // I'll &quot;walk&quot; the &lt;b&gt;dog&lt;/b&gt; now

echo $b; // I'll "walk" the <b>dog</b> now
?>

htmlspecialchars

将特定的特殊字符转为HTML实体

1
string htmlspecialchars(string $string[, int $flags = ENT_COMPAT | ENT_HTML401[, string $encoding = ini_get("default_charset")[, bool $double_encode = true]]])
字符替换后
& (& 符号)&amp;
" (双引号)&quot;,除非设置了 ENT_NOQUOTES
' (单引号)设置了 ENT_QUOTES 后, &#039; (如果是 ENT_HTML401) ,或者 &apos; (如果是 ENT_XML1ENT_XHTMLENT_HTML5)。
< (小于)&lt;
> (大于)&gt;

参数

string

输入的字符串

flags
常量名称描述
ENT_COMPAT会转换双引号,不转换单引号。
ENT_QUOTES既转换双引号也转换单引号。
ENT_NOQUOTES单/双引号都不转换
ENT_IGNORE静默丢弃无效的代码单元序列,而不是返回空字符串。 不建议使用此标记, 因为它» 可能有安全影响。
ENT_SUBSTITUTE替换无效的代码单元序列为 Unicode 代替符(Replacement Character), U+FFFD (UTF-8) 或者 &#xFFFD; (其他),而不是返回空字符串。
ENT_DISALLOWED为文档的无效代码点替换为 Unicode 代替符(Replacement Character): U+FFFD (UTF-8),或 &#xFFFD;(其他),而不是把它们留在原处。 比如以下情况下就很有用:要保证 XML 文档嵌入额外内容时格式合法。
ENT_HTML401以 HTML 4.01 处理代码。
ENT_XML1以 XML 1 处理代码。
ENT_XHTML以 XHTML 处理代码。
ENT_HTML5以 HTML 5 处理代码。
encoding

默认编码与PHP版本有关

  • PHP5.6以后,使用default_charset配置
  • PHP5.4和PHP5.5,使用UTF-8
  • 更早,使用ISO-8859-1

支持以下字符集

字符集别名描述
ISO-8859-1ISO8859-1西欧,Latin-1
ISO-8859-5ISO8859-5Little used cyrillic charset (Latin/Cyrillic).
ISO-8859-15ISO8859-15西欧,Latin-9。增加欧元符号,法语和芬兰语字母在 Latin-1(ISO-8859-1) 中缺失。
UTF-8ASCII 兼容的多字节 8 位 Unicode。
cp866ibm866, 866DOS 特有的西里尔编码。本字符集在 4.3.2 版本中得到支持。
cp1251Windows-1251, win-1251, 1251Windows 特有的西里尔编码。本字符集在 4.3.2 版本中得到支持。
cp1252Windows-1252, 1252Windows 特有的西欧编码。
KOI8-Rkoi8-ru, koi8r俄语。本字符集在 4.3.2 版本中得到支持。
BIG5950繁体中文,主要用于中国台湾省。
GB2312936简体中文,中国国家标准字符集。
BIG5-HKSCS繁体中文,附带香港扩展的 Big5 字符集。
Shift_JISSJIS, 932日语
EUC-JPEUCJP日语
MacRomanMac OS 使用的字符串。
double_encode

关闭 double_encode 时,PHP 不会转换现有的 HTML 实体, 默认是全部转换。

返回值

某些特定的字符被转换成HTML实体后的字符串

1
2
3
<?php
echo htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES); // &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;
?>

html_specialchars_decode

将特殊的HTML实体转换回普通字符

1
string htmlspecialchars_decode(string $string[, int $flags = ENT_COMPAT | ENT_HTML401])

被转换的实体有: &amp;&quot; (没有设置ENT_NOQUOTES 时), &#039; (设置了 ENT_QUOTES 时), &lt; 以及&gt;

参数

string

输入的字符串

flags
常量名说明
ENT_COMPAT转换双引号,不转换单引号。
ENT_QUOTES单引号和双引号都转换。
ENT_NOQUOTES单引号和双引号都不转换。
ENT_HTML401作为HTML 4.01编码处理。
ENT_XML1作为XML 1编码处理。
ENT_XHTML作为XHTML编码处理。
ENT_HTML5作为HTML 5编码处理。
1
2
3
4
5
6
<?php
$str = "<p>this -&gt; &quot;</p>\n";

echo htmlspecialchars_decode($str); // <p>this -> "</p>
echo htmlspecialchars_decode($str, ENT_NOQUOTES); // <p>this -> &quot;</p>
?>

strip_tags

从字符串中去除HTML和PHP标记

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

参数

str

输入的字符串

allowable_tags

指定不被去除的字符列表

HTML 注释和 PHP 标签也会被去除。这里是硬编码处理的,所以无法通过 allowable_tags 参数进行改变。

使用

1
2
3
4
5
<?php
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text); // Test paragraph. Other text
echo strip_tags($text, '<p><a>'); // <p>Test paragraph.</p> <a href="#fragment">Other text</a>
?>

nl2br

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

1
string nl2br(string $string[, bool $is_xhtml = TRUE])

在字符串string所有新行之前插入<br><br />并返回

参数

string

输入字符串。

is_xhtml

是否使用 XHTML 兼容换行符。

使用

1
2
3
4
5
6
7
8
9
<?php
echo nl2br("foo isn't\n bar");
// foo isn't<br />
// bar

echo nl2br("Welcome\r\nThis is my HTML document", false);
// Welcome<br>
// This is my HTML document
?>

转义

addcslashes

以 C 语言风格使用反斜线转义字符串中的字符

1
string addcslashes(string $str, string $charlist)

参数

str

要转义的字符。

charlist

如果 charlist 中包含有 \n\r 等字符,将以 C 语言风格转换,而其它非字母数字且 ASCII 码低于 32 以及高于 126 的字符均转换成使用八进制表示。

当定义 charlist 参数中的字符序列时,需要确实知道介于自己设置的开始及结束范围之内的都是些什么字符。

当选择对字符 0,a,b,f,n,r,t 和 v 进行转义时需要小心,它们将被转换成 \0\a\b\f\n\r\t\v。在 PHP 中,只有 \0(NULL),\r(回车符),\n(换行符)和 \t(制表符)是预定义的转义序列, 而在 C 语言中,上述的所有转换后的字符都是预定义的转义序列。

使用

1
2
3
4
<?php
echo addcslashes('foo[ ]', 'A..z'); // \f\o\o\[ \]
echo addcslashes("zoo['.']", 'z..A'); // \zoo['\.']
?>

stripslashes

反引用一个使用 addcslashes() 转义的字符串

1
string stripcslashes(string $str)

返回反转义后的字符串。可识别类似 C 语言的 \n\r,… 八进制以及十六进制的描述。

使用

1
2
3
<?php
var_dump(stripcslashes('\n') == "\n"); // bool(true)
?>

addslashes

使用反斜线引用字符串

1
string addslashes(string $str)

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

1
2
3
<?php
echo addslashes("Is your name O'reilly?"); // Is your name O\'reilly?
?>

stripslashes

反引用一个引用字符串

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

quotemeta

转义元字符集

1
. \ + * ? [ ^ ] ( $ )
1
string quotemeta(string $str)
1
2
3
<?php
echo quotemeta("Hello world. (can you hear me?)"); // Hello world\. \(can you hear me\?\)
?>

比较

strcmp

二进制安全字符串比较

1
int strcmp(string $str1, string $str2)

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

1
2
3
<?php
var_dump(strcmp('Hello', 'hello') !== 0); // bool(true)
?>

strcasecmp

二进制安全比较字符串(不区分大小写)

1
int strcasecmp(string $str1, string $str2)

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

1
2
3
<?php
var_dump(strcasecmp('Hello', 'hello') !== 0); // bool(false)
?>

strnatcmp

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

1
int strnatcmp(string $str1, string $str2)

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

1
2
3
4
5
6
7
8
9
<?php
$arr1 = $arr2 = array("img12.png", "img10.png", "img2.png", "img1.png");
echo "Standard string comparison\n";
usort($arr1, "strcmp");
print_r($arr1);
echo "\nNatural order string comparison\n";
usort($arr2, "strnatcmp");
print_r($arr2);
?>

输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Standard string comparison
Array
(
[0] => img1.png
[1] => img10.png
[2] => img12.png
[3] => img2.png
)

Natural order string comparison
Array
(
[0] => img1.png
[1] => img2.png
[2] => img10.png
[3] => img12.png
)

strnatcasecmp

使用“自然顺序”算法比较字符串(不区分大小写)

1
int strnatcasecmp(string $str1, string $str2)

除了不区分大小写,该函数的行为与 strnatcmp() 类似

strncmp

二进制安全比较字符串开头的若干个字符

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

该函数与 strcmp() 类似,不同之处在于你可以指定两个字符串比较时使用的长度(即最大比较长度)。

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

strncasecmp

二进制安全比较字符串开头的若干个字符(不区分大小写)

1
int strncasecmp(string $str1, string $str2, int $len)

该函数与 strcasecmp() 类似,不同之处在于你可以指定两个字符串比较时使用的长度(即最大比较长度)。

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

位置查找

strpos

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

1
int strpos(string $haystack, mixed $needle[, int $offset = 0])

返回 needlehaystack 中首次出现的数字位置。

参数

haystack

在该字符串中进行查找。

needle

如果 needle 不是一个字符串,那么它将被转换为整型并被视为字符的顺序值。

offset

如果提供了此参数,搜索会从字符串该字符数的起始位置开始统计。 如果是负数,搜索会从字符串结尾指定字符数开始。

返回值

返回 needle 存在于 haystack 字符串起始的位置(独立于 offset)。同时注意字符串位置是从0开始,而不是从1开始的。

如果没找到 needle,将返回 FALSE。

使用

1
2
3
4
<?php
echo strpos('abc', 'a'); // 0
echo strpos('abcdef abcdef', 'a', 1); // 7
?>

stripos

查找字符串首次出现的位置(不区分大小写)

1
int stripos(string $haystack, string $needle[, int $offset = 0])

返回在字符串 haystackneedle 首次出现的数字位置。

strpos() 不同,stripos() 不区分大小写。

1
2
3
4
<?php
echo stripos('abc', 'a'); // 0
echo stripos('ABC', 'a'); // 0
?>

strrpos

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

1
int strrpos(string $haystack, string $needle[, int $offset = 0])

返回字符串 haystackneedle 最后一次出现的数字位置。

1
2
3
4
5
6
<?php
$foo = "0123456789a123456789b123456789c";
var_dump(strrpos($foo, '7', -5)); // 从尾部第 5 个位置开始查找,int(17)
var_dump(strrpos($foo, '7', 20)); // 从第 20 个位置开始查找,int(27)
var_dump(strrpos($foo, '7', 28)); // bool(false)
?>

strripos

计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)

1
int strripos(string $haystack, string $needle[, int $offset = 0])

以不区分大小写的方式查找指定字符串在目标字符串中最后一次出现的位置。与 strrpos() 不同,strripos() 不区分大小写。

strstr

查找字符串的首次出现

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

返回 haystack 字符串从 needle 第一次出现的位置开始到 haystack 结尾的字符串。

如果仅仅想确定 needle 是否存在于 haystack 中,请使用速度更快、耗费内存更少的 strpos() 函数。

参数

haystack

输入字符串。

needle

如果 needle 不是一个字符串,那么它将被转化为整型并且作为字符的序号来使用。

before_needle

若为 TRUEstrstr() 将返回 needlehaystack 中的位置之前的部分。

返回值

PHP >= PHP5.3.0

返回字符串的一部分或者 FALSE(如果未发现 needle)。

使用

1
2
3
4
<?php
echo strstr('name@example.com', '@'); // @example.com
echo strstr('name@example.com', '@', true); // name
?>

strchr

strstr()的别名

stristr

strstr()的忽略大小写版本

strrchr

查找指定字符在字符串中的最后一次出现

1
string strrchr(string $haystack, mixed $needle)

该函数返回 haystack 字符串中的一部分,这部分以 needle 的最后出现位置开始,直到 haystack 末尾。

参数

haystack

在该字符串中查找。

needle

如果 needle 包含了不止一个字符,那么仅使用第一个字符。该行为不同于 strstr()

如果 needle 不是一个字符串,那么将被转化为整型并被视为字符顺序值。

返回值

该函数返回字符串的一部分。如果 needle 未被找到,返回 FALSE

字符串替换

str_replace

子字符串替换

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

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

参数

  • 如果 searchreplace 为数组,那么 str_replace() 将对 subject 做二者的映射替换。
  • 如果 replace 的值的个数少于 search 的个数,多余的替换将使用空字符串来进行。
  • 如果 search 是一个数组而 replace 是一个字符串,那么 search 中每个元素的替换将始终使用这个字符串。该转换不会改变大小写。
  • 如果 searchreplace 都是数组,它们的值将会被依次处理。

查找的目标值,也就是 needle。一个数组可以指定多个目标。

replace

search 的替换值。一个数组可以被用来指定多重替换。

subject

执行替换的数组或者字符串。也就是 haystack

如果 subject 是一个数组,替换操作将遍历整个 subject,返回值也将是一个数组。

count

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

返回值

该函数返回替换后的数组或者字符串。

使用

1
2
3
4
5
6
7
8
<?php
echo str_replace("%body%", "black", "<body text='%body%'>"); // <body text='black'>
echo str_replace(array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U"), "", "Hello World of PHP"); // Hll Wrld f PHP
echo str_replace(array("fruits", "vegetables", "fiber"), array("pizza", "beer", "ice cream"), "You should eat fruits, vegetables, and fiber every day."); // You should eat pizza, beer, and ice cream every day

$str = str_replace("ll", "", "good golly miss molly!", $count);
echo $count; // 2
?>

str_ireplace

str_replace()的忽略大小写版本

substr_replace

替换字符串的子串

1
mixed substr_replace(mixed $string, mixed $replacement, mixed $start[, mixed $length])

substr_replace() 在字符串 string 的副本中将由 start 和可选的 length 参数限定的子字符串使用 replacement 进行替换。

参数

string

输入字符串。

replacement

替换字符串。

start
  • 如果 start 为正数,替换将从 stringstart 位置开始。
  • 如果 start 为负数,替换将从 string 的倒数第 start 个位置开始。
length
  • 如果设定了这个参数并且为正数,表示 string 中被替换的子字符串的长度
  • 如果设定为负数,它表示待替换的子字符串结尾处距离 string 末端的字符个数
  • 如果没有提供此参数,那么它默认为 strlen(string)(字符串的长度)。当然,如果 length 为 0,那么这个函数的功能为将 replacement 插入到 stringstart 位置处。

返回值

返回结果字符串。如果 string 是个数组,那么也将返回一个数组。

1
2
3
4
5
6
7
8
9
10
$var = 'ABCDEFGH:/MNRPQR/';
echo substr_replace($var, 'bob', 0); // bob
echo substr_replace($var, 'bob', 0, strlen($var)); // bob

echo substr_replace($var, 'bob', 0, 0); // bobABCDEFGH:/MNRPQR/

echo substr_replace($var, 'bob', 10, -1); // ABCDEFGH:/bob/
echo substr_replace($var, 'bob', -7, -1); // ABCDEFGH:/bob/

echo substr_replace($var, '', 10, -1); // ABCDEFGH://

其他

substr

返回字符串的子串

1
string substr(string $string, int $start[, int $length])

返回字符串 stringstartlength 参数指定的子字符串。

参数

string

输入字符串。必须至少有一个字符。

start
  • 如果 start 是非负数,返回的字符串将从 stringstart 位置开始,从 0 开始计算。例如,在字符串 “abcdef” 中,在位置 0 的字符是 “a”,位置 2 的字符串是 “c” 等等。
  • 如果 start 是负数,返回的字符串将从 string 结尾处向前数第 start 个字符开始。
  • 如果 string 的长度小于 start,将返回 FALSE
length
  • 如果提供了正数的 length,返回的字符串将从 start 处开始最多包括 length 个字符(取决于 string 的长度)。
  • 如果提供了负数的 length,那么 string 末尾处的 length 个字符将会被省略(若 start 是负数则从字符串尾部算起)。如果 start 不在这段文本中,那么将返回 FALSE
  • 如果提供了值为 0,FALSENULLlength,那么将返回一个空字符串。
  • 如果没有提供 length,返回的子字符串将从 start 位置开始直到字符串结尾。

返回值

返回提取的子字符串, 或者在失败时返回 FALSE

1
2
3
4
5
6
7
<?php
echo substr('abcdef', 1); // bcdef
echo substr('abcdef', 1, 3); // bcd
echo substr('abcdef', 0, 4); // abcd
echo substr('abcdef', 0, 8); // abcdef
echo substr('abcdef', -1, 1); // f
?>