String
substr_count
统计子字符串在字符串中出现次数
$text = 'This is a test';
echo strlen($text); // 14
echo substr_count($text, 'is'); // 2
// 字符串被简化为 's is a test',因此输出 1
echo substr_count($text, 'is', 3);
// 字符串被简化为 's i',所以输出 0
echo substr_count($text, 'is', 3, 3);
// 因为 5+10 > 14,所以生成警告
echo substr_count($text, 'is', 5, 10);
// 输出 1,因为该函数不计算重叠字符串
$text2 = 'gcdgcdgcd';
echo substr_count($text2, 'gcdgcd');
str_split
如果指定了可选的 split_length 参数(第二个参数),返回数组中的每个元素均为一个长度为 split_length 的字符块,否则每个字符块为单个字符。
如果 split_length 小于 1,返回 FALSE。如果 split_length 参数超过了 string 超过了字符串 string 的长度,整个字符串将作为数组仅有的一个元素返回。
$str = 'riven';
var_export(str_split($str));
var_export(str_split($str, 2));
/*
array (
0 => 'r',
1 => 'i',
2 => 'v',
3 => 'e',
4 => 'n',
)
array (
0 => 'ri',
1 => 've',
2 => 'n',
)
*/
substr_replace
替换字符串的子字符串
$var = 'ABCDEFGH:/MNRPQR/';
/* 这两个例子使用 "bob" 替换整个 $var。*/
echo substr_replace($var, 'bob', 0) . PHP_EOL;
echo substr_replace($var, 'bob', 0, strlen($var)) . PHP_EOL;
/* 将 "bob" 插入到 $var 的开头处。*/
echo substr_replace($var, 'bob', 0, 0) . PHP_EOL;
/* 下面两个例子使用 "bob" 替换 $var 中的 "MNRPQR"。*/
echo substr_replace($var, 'bob', 10, -1) . PHP_EOL;
echo substr_replace($var, 'bob', -7, -1) . PHP_EOL;
/* 从 $var 中删除 "MNRPQR"。*/
echo substr_replace($var, '', 10, -1) . PHP_EOL;
$input = ['A: XXX', 'B: XXX', 'C: XXX'];
// A simple case: replace XXX in each string with YYY.
echo implode('; ', substr_replace($input, 'YYY', 3, 3)) . PHP_EOL;
// A more complicated case where each replacement is different.
$replace = array('AAA', 'BBB', 'CCC');
echo implode('; ', substr_replace($input, $replace, 3, 3)) . PHP_EOL;
// Replace a different number of characters each time.
$length = array(1, 2, 3);
echo implode('; ', substr_replace($input, $replace, 3, $length)) . PHP_EOL;
/*
bob
bob
bobABCDEFGH:/MNRPQR/
ABCDEFGH:/bob/
ABCDEFGH:/bob/
ABCDEFGH://
A: YYY; B: YYY; C: YYY
A: AAA; B: BBB; C: CCC
A: AAAXX; B: BBBX; C: CCC
*/
// 实例: 隐藏电话号码,敏感数据加密
echo substr_replace('18700000001', '****', 3, 4); // 187****0001
// 隐藏字符
function desensitize($string, $start = 0, $length = 0, $re = '*')
{
if (empty($string) || empty($length) || empty($re)) {
return $string;
}
$end = $start + $length;
$strLen = mb_strlen($string);
$strArr = [];
for ($i = 0; $i < $strLen; $i++) {
if ($i >= $start && $i < $end) {
$strArr[] = $re;
} else {
$strArr[] = mb_substr($string, $i, 1);
}
}
return implode('', $strArr);
}
$name = '德玛西亚';
echo desensitize($name, 1, mb_strlen($name)); // 德***
parse_str
将字符串解析成多个变量
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str, $output);
print_r($output);
/*
Array
(
[first] => value
[arr] => Array
(
[0] => foo bar
[1] => baz
)
)
*/
uniqid
生成唯一id(此函数努力创建唯一识别符,但它不保证返回值得唯一性)
echo uniqid(); // 5d4bd22d4271c
get_magic_quotes_gpc
获取当前 magic_quotes_gpc 的配置选项设置
// 如果启用了魔术引号
$str = "O\'reilly";
echo addslashes($str) . PHP_EOL; // O\\\'reilly
// 适用各个 PHP 版本的用法
if (get_magic_quotes_gpc()) {
$lastName = stripslashes($str);
} else {
$lastName = $str;
}
echo $lastName . PHP_EOL; // O\'reilly
// 如果使用 MySQL
$lastName = mysql_real_escape_string($lastName);
echo $lastName . PHP_EOL; // O\\\'reilly
$sql = "INSERT INTO lastnames (lastname) VALUES ('$lastName')";
echo $sql . PHP_EOL; //
addslashes
使用反斜线引用字符串(在 '、"、\、NUL(NULL 字符) 字符前加上反斜线)
echo addslashes('Shanghai is the "biggest" city in China.');
// Shanghai is the \"biggest\" city in China.
stripslashes
反引用一个引用字符串(去除反斜杠)
// #1 单个字符串
$str = "Is your name O\\'reilly?";
echo stripslashes($str); // Is your name O'reilly?
// #2 对数组递归使用
function stripslashes_deep($value)
{
$value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value);
return $value;
}
// 范例
$array = ["f\\'oo", "b\\'ar", ["fo\\'o", "b\\'ar"]];
$array = stripslashes_deep($array);
// 输出
print_r($array);
/*
Array
(
[0] => f'oo
[1] => b'ar
[2] => Array
(
[0] => fo'o
[1] => b'ar
)
)
*/
gzcompress
压缩一个字符串(ZLIB压缩格式)
gzuncompress
解压压缩字符串
$level = 9; // 压缩等级0~9, 缺省值6
$compressed = gzcompress('Compress me', $level); // 压缩字符串
echo gzuncompress($compressed); // 解压字符串
gzdeflate
压缩一个字符串(DEFLATE压缩格式), 压缩效率优于gzcompress()
gzinflate
解压压缩字符串
$level = 9; // 压缩等级0~9, 缺省值6
$compressed = gzdeflate('Compress me', $level); // 压缩字符串
echo gzinflate($compressed); // 解压字符串
strpbrk
查找字符的首次出现,并返回从该位置到字符串结尾的所有字符
$text = 'This is a Simple text.';
echo strpbrk($text, 'mi'); // is is a Simple text.('i' 先被匹配)
echo strpbrk($text, 'S'); // Simple text.(字符区分大小写)
strtr
strtr()函数的效率优于str_replace()
echo strtr("baab", "ab", "01"), PHP_EOL; // 1001
echo strtr("baab", ["ab" => "01"]); // ba01
strstr
查找字符串的首次出现,并返回从该位置到字符串结尾的所有字符
stristr
用法与strstr()一致, 不区分大小写
// 返回 'c' 第一次出现之后的字符串部分
echo strstr('efficiency', 'c'), PHP_EOL; // ciency
// 返回 'c'「ASCII值=99」 第一次出现之后的字符串部分
echo strstr('efficiency', 99), PHP_EOL; // ciency「需要web环境」
// 返回 'ency' 第一次出现之前的字符串部分
echo strstr('efficiency', 'ency', true), PHP_EOL; // effici
mbstring
mb_substr
截取字符串
mb_strrpos
从后查找字符串
mb_check_encoding
检查字符串在指定的编码里是否有效
// 返回 '.' 最后一次出现之前的字符串部分
$str = 'a.b.c.d';
echo mb_substr($str, 0, mb_strrpos($str, '.')); // a.b.c
/**
* 尝试使用 mb_check_encoding 来检查数据是否可以被解释为 UTF-8 编码。
* 如果不能,这意味着数据可能包含无法用 UTF-8 表示的二进制数据。
* @param $data
* @return bool
*/
function is_binary($data) {
return !mb_check_encoding($data, 'UTF-8');
}
strrchr
查找字符串的末次出现,并返回从该位置到字符串结尾的所有字符,区分大小写
(方便记忆:如此好人)
echo strrchr('Hello world!', 'o'); // orld!
// 通过 'o' 的ASCII值搜索字符串,并返回字符串的其余部分(7.3.4版本后会抛出异常)
echo strrchr('Hello world!', 111); // orld!
// 获取扩展名
$path = '/www/public_html/index.html';
$filename = substr(strrchr($path, "/"), 1);
echo $filename; // index.html
str_repeat
函数把字符串重复指定的次数
echo str_repeat('.', 5);// .....(重复5次)
ucfirst
将字符串的第一个字符改成大写,返回首字符大写的字符串
$foo = 'hello world!';
echo ucfirst($foo);// Hello world!
lcfirst
将字符串的第一个字符改成小写,返回首字符小写的字符串
$foo = 'Hello World!';
echo lcfirst($foo);// hello World!
ucwords
将字符串的每个单词的首字符变成大写
$foo = 'hello world!';
echo ucwords($foo);// 输出结果: Hello World!
preg_split
通过一个正则表达式分隔字符串,返回数组
// 使用逗号或空格(包含" ", \r, \t, \n, \f)分隔短语
$keywords = preg_split(
'/[\s,]+/',
'hypertext language, programming'
);
print_r($keywords);
/*
Array
(
[0] => hypertext
[1] => language
[2] => programming
)
*/
number_format
函数通过千位分组来格式化数字(切记不用来计算)
// 注释: 该函数支持一个、两个或四个参数(三个不支持)
echo number_format('1000000'); // 1,000,000
echo number_format('1000000', 2); // 1,000,000.00
echo number_format('1000000', 2, ',', '.');// 1.000.000,00