一直以来,我们都知道在输入或输出字符串的时候需要先去除字符串的空字符,但是究竟为什么这是必要的?本 wiki 将会介绍去除首尾空字符的相关知识。
基础知识
去除首尾空字符原因
首尾空字符属于无意义、多余字符;
占据多余的存储空间;
增加解析内存消耗;
可能造成换行;
可能造成不可预测的错误。
与空字符相关的符号
符号
ASCII 16 进制表达式
含义" "
0x20
普通空格
\t
0x09
制表符
\n
0x0A
换行符
\r
0x0D
回车符
\0
0x00
空字节符
\x0B
0x0B
垂直制表符
PHP 去除首尾字符串方法
trim,ltrim,rtrim
语法结构
trim / ltrim / rtrim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] ) : string
参数含义:
名称
含义
必需str
待处理的字符串。
是
character_mask
可选参数,过滤字符也可由 character_mask 参数指定。一般要列出所有希望过滤的字符,也可以使用 “..” 列出一个字符范围。注意:可选参数不要使用单引号字符串,应使用双引号字符串。
否
函数返回值:
过滤后的字符串。
拓展
使用示例
ltrim、rtrim 功能分别和 trim 的左端、右端的过滤功能相同,理解 trim 用法便可理解其他二者用法,所以本 wiki 主要介绍 trim 的使用。
例 1 —— 一般使用
// 待处理的字符串
$text = "\t\t我是一名软件工程师 ... ";
$binary = "\x09这句话不止中 间有个空格。\x0A";
$hello = "Hello World";
var_dump($text, $binary, $hello);
print "
";
// 处理结果
$trimmed = trim($text);
var_dump($trimmed);
print "
";
$trimmed = trim($text, " \t.");
var_dump($trimmed);
print "
";
$trimmed = trim($hello, "Hdle");
var_dump($trimmed);
print "
";
// 清除 $binary 首位的 ASCII 控制字符
// (包括 0-31)
$clean = trim($binary, "\x00..\x1F");
var_dump($clean);
例 1 结果:
string(35) " 我是一名软件工程师 ... " string(39) " 这句话不止中 间有个空格。 " string(11) "Hello World"
string(31) "我是一名软件工程师 ..."
string(27) "我是一名软件工程师"
string(5) "o Wor"
string(37) "这句话不止中 间有个空格。"
结果分析:
当没有可选参数时,trim 会根据默认值 " \t\n\r\0\x0B" 过滤字符串;
当边缘字符被去掉之后,次边缘字符会被顶上继续被过滤;
通过使用 (..)操作符,trim 过滤了某一范围内的 ASCII 字符。
例 2 —— 清理数组值
function trimValue(&$value)
{
$value = trim($value);
}
$greats = ['海瑞', '王守仁 ', ' 戚继光 '];
var_dump($greats);
array_walk($greats, 'trimValue');
var_dump($greats);
例 2 结果:
array(3) { [0]=> string(6) "海瑞" [1]=> string(10) "王守仁 " [2]=> string(11) " 戚继光 " }
array(3) { [0]=> string(6) "海瑞" [1]=> string(9) "王守仁" [2]=> string(9) "戚继光" }