PHP 字符串:去除首尾空字符 Draft 2 个改进

一直以来,我们都知道在输入或输出字符串的时候需要先去除字符串的空字符,但是究竟为什么这是必要的?本 wiki 将会介绍去除首尾空字符的相关知识。

基础知识

去除首尾空字符原因

  1. 首尾空字符属于无意义、多余字符;
  2. 占据多余的存储空间;
  3. 增加解析内存消耗;
  4. 可能造成换行;
  5. 可能造成不可预测的错误。

与空字符相关的符号

符号 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 —— 一般使用
<?php
// 待处理的字符串
$text   = "\t\t我是一名软件工程师 ...  ";
$binary = "\x09这句话不止中 间有个空格。\x0A";
$hello  = "Hello World";
var_dump($text, $binary, $hello);
print "<br>";

// 处理结果
$trimmed = trim($text);
var_dump($trimmed);
print "<br>";

$trimmed = trim($text, " \t.");
var_dump($trimmed);
print "<br>";

$trimmed = trim($hello, "Hdle");
var_dump($trimmed);
print "<br>";

// 清除 $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 —— 清理数组值
<?php
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) "戚继光" }
php
本 Wiki 尚未完善,邀您参与 如何撰写一篇高品质的 Wiki?
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!