2024 年 PHP 日本大会

rtrim

(PHP 4, PHP 5, PHP 7, PHP 8)

rtrim去除字符串末尾的空格(或其他字符)

描述

rtrim(string $string, string $characters = " \n\r\t\v\x00"): string

此函数返回一个字符串,其中已去除 string 末尾的空格(或其他字符)。

如果没有第二个参数,rtrim() 将去除以下字符:

  • " "ASCII SP 字符 0x20,普通空格。
  • "\t"ASCII HT 字符 0x09,制表符。
  • "\n"ASCII LF 字符 0x0A,换行符(换行)。
  • "\r"ASCII CR 字符 0x0D,回车符。
  • "\0"ASCII NUL 字符 0x00,空字节。
  • "\v"ASCII VT 字符 0x0B,垂直制表符。

参数

string
输入字符串。
characters
可选地,可以使用 characters 参数指定要去除的字符。只需列出所有需要去除的字符即可。可以使用 .. 指定递增的字符范围。

返回值

返回修改后的字符串。

范例

示例 #1 rtrim() 的用法示例

<?php

$text
= "\t\tThese are a few words :) ... ";
$binary = "\x09Example string\x0A";
$hello = "Hello World";
var_dump($text, $binary, $hello);

print
"\n";

$trimmed = rtrim($text);
var_dump($trimmed);

$trimmed = rtrim($text, " \t.");
var_dump($trimmed);

$trimmed = rtrim($hello, "Hdle");
var_dump($trimmed);

// 去除 $binary 末尾的 ASCII 控制字符
// (从 0 到 31 包括在内)
$clean = rtrim($binary, "\x00..\x1F");
var_dump($clean);

?>

以上示例将输出

string(32) "        These are a few words :) ...  "
string(16) "    Example string
"
string(11) "Hello World"

string(30) "        These are a few words :) ..."
string(26) "        These are a few words :)"
string(9) "Hello Wor"
string(15) "    Example string"

参见

  • trim() - 去除字符串开头和结尾的空格(或其他字符)
  • ltrim() - 去除字符串开头的空格(或其他字符)
添加备注

用户贡献的备注 7 条备注

pinkgothic at gmail dot com
14 年前
我对 php 的数组函数有一种痴迷的爱,因为在各种情况下,它们极大地简化了我复杂的字符串处理……所以,这里还有一个字符串-rtrim() 变体。

<?php

function strrtrim($message, $strip) {
// 按 strip 字符串拆分消息
$lines = explode($strip, $message);
$last = '';
// 弹出末尾的空字符串
do {
$last = array_pop($lines);
} while (empty(
$last) && (count($lines)));
// 重新组装剩余部分
return implode($strip, array_merge($lines, array($last)));
}

?>

令人惊讶的是,我没想到的是:在执行时间方面,它与下面的 harmor 的 rstrtrim 完全相同。o_o 太棒了!
gbelanger at exosecurity dot com
18 年前
没错,Perl 的 chomp() 只会去除换行符。但是,Perl 有 chop() 函数,它与 PHP 的 rtrim() 几乎完全相同。

---

以下是如何递归地去除数组中每个元素的空格的快速方法,在使用 file() 函数后非常有用。

<?php
# 读取 /etc/passwd 文件并在每个条目上去除换行符
$aFileContent = file("/etc/passwd");
foreach (
$aFileContent as $sKey => $sValue) {
$aFileContent[$sKey] = rtrim($sValue);
}

print_r($aFileContent);
?>
[email protected]
21年前
这展示了在使用可选 charlist 参数时 rtrim 的工作方式
rtrim 一次读取一个字符,来自可选的 charlist 参数,并将其与字符串 str 的末尾进行比较。如果字符匹配,则将其去除,并再次开始,查看字符串 str 中“新的”最后一个字符,并再次将其与 charlist 中的第一个字符进行比较。如果字符不匹配,则移动到 charlist 参数中的下一个字符,再次进行比较。它会继续进行,直到 charlist 参数完全处理完毕,一次一个字符,并且字符串 str 不再包含任何匹配项。返回新的“rtrimmed”字符串。
<?php
// 示例 1:
rtrim('This is a short short sentence', 'short sentence');
// 返回 'This is a'
// 如果你期望结果是 'This is a short ',
// 那么你错了;精确的字符串 'short sentence' 没有匹配。记住,是逐字符比较!
// 示例 2:
rtrim('This is a short short sentence', 'cents');
// 返回 'This is a short short '
?>
[email protected]
19年前
我需要一种方法来去除字符串末尾的所有空格以及一些选定的字符串。所以我编写了这个类以便在需要修剪内容时重复使用。

<?php

class cleaner {

function
cleaner ($cuts,$pinfo) {
$ucut = "0";
$lcut = "0";
while (
$cuts[$ucut]) {
$lcut++;
$ucut++;
}
$lcut = $lcut - 1;
$ucut = "0";
$rcut = "0";
$wiy = "start";

while (
$wiy) {

if (
$so) {
$ucut = "0";
$rcut = "0";
unset(
$so);
}

if (!
$cuts[$ucut]) {
$so = "restart";
} else {
$pinfo = rtrim($pinfo);
$bpinfol = strlen($pinfo);
$tcut = $cuts[$ucut];
$pinfo = rtrim($pinfo,"$tcut");
$pinfol = strlen($pinfo);

if (
$bpinfol == $pinfol) {
$rcut++;
if (
$rcut == $lcut) {
unset(
$wiy);
}
$ucut++;
} else {
$so = "restart";
}
}
}

$this->cleaner = $pinfo;
}

}

$pinfo = "Well... I'm really bored...<br /><br>&nbsp; \n\t&nbsp;<br><br /><br>&nbsp; \r\r&nbsp;<br>\r<br /><br>\r&nbsp; &nbsp;\n<br> <br />\t";

$cuts = array('\n','\r','\t',' ',' ','&nbsp;','<br />','<br>','<br/>');

$pinfo = new cleaner($cuts,$pinfo);
$pinfo = $pinfo->cleaner;

print
$pinfo;

?>

这个类将获取你放入 $cust 数组中的任何字符串,并将其从 $pinfo 字符串的末尾移除。它对于清理用户发布到你的网站的评论、文章或邮件非常有用,可以去除额外的空格或空行。
[email protected]
11年前
关于反复出现的字符串剥离而不是字符剥离 rtrim() 实现的主题……最简单的(带有一个警告)可能是 basename() 函数。它有一个第二个参数,可以用作使用整个字符串的右修剪。

<?php

echo basename('MooFoo', 'Foo');

?>

……输出 'Moo'。

因为它还剥离任何看起来像目录的东西,所以它与从末尾删除字符串并不完全相同。

<?php

echo basename('Zoo/MooFoo', 'Foo');

?>

……仍然输出 'Moo'。

但有时它能完成工作。
harmor
16年前
我相信有一种更好的方法可以从字符串的末尾去除字符串。

<?php
/**
* 从字符串末尾删除指定字符串
*
* @param string $str 输入字符串
* @param string $remove 可选,要删除的字符串
*
* @return string 修改后的字符串
*/
function rstrtrim($str, $remove=null)
{
$str = (string)$str;
$remove = (string)$remove;

if(empty(
$remove))
{
return
rtrim($str);
}

$len = strlen($remove);
$offset = strlen($str)-$len;
while(
$offset > 0 && $offset == strpos($str, $remove, $offset))
{
$str = substr($str, 0, $offset);
$offset = strlen($str)-$len;
}

return
rtrim($str);

}
//函数 rstrtrim($str, $remove=null) 结束

echo rstrtrim('Hello World!!!', '!') .'<br />'; //"Hello World"
echo rstrtrim('Hello World!!!', '!!') .'<br />'; //"Hello World!"
echo rstrtrim('Hello World!!!', '!!!') .'<br />'; //"Hello World"
echo rstrtrim('Hello World!!!', '!!!!').'<br />'; //"Hello World!!!"
?>
HW
21年前
<?php
$text
= "此字符串结尾包含一些不需要的字符。";
$text1 = rtrim($text, 'a..z');
$text1 = rtrim($text1, '.');
echo
$text1; // 只删除了 '.'。
$text2 = rtrim($text, 'a..z.');
echo
$text2; // 删除了整个最后一个单词。
?>
To Top