rtrim

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

rtrim从字符串末尾去除空白字符(或其他字符)

描述

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

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

如果没有第二个参数,rtrim() 将去除这些字符

  • " " (ASCII 32 (0x20)),普通空格。
  • "\t" (ASCII 9 (0x09)),制表符。
  • "\n" (ASCII 10 (0x0A)),换行符(换行符)。
  • "\r" (ASCII 13 (0x0D)),回车符。
  • "\0" (ASCII 0 (0x00)),NULL 字节。
  • "\v" (ASCII 11 (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() - 从字符串开头去除空白字符(或其他字符)

添加注释

用户贡献的注释 14 个注释

44
pinkgothic at gmail dot com
14 年前
我疯狂地喜欢 PHP 的数组函数,因为它们在各种情况下极大地简化了复杂的字符串处理... 所以,再来一个 string-rtrim() 变体

<?php

function strrtrim($message, $strip) {
// 按 strip 字符串拆分 message
$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 太棒了!
30
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);
?>
25
todd at magnifisites dot com
20 年前
这展示了在使用可选 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 '
?>
15
pinkgothic at gmail dot com
11 年前
关于字符串去除而不是字符去除 rtrim() 实现的重复主题... 最简单的方法(带一个警告)可能是 basename() 函数。它有一个第二个参数,该参数充当使用整个字符串的右去除函数。

<?php

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

?>

...输出 'Moo'。

由于它也会去除任何看起来像目录的东西,所以它与从末尾删除字符串并不完全相同。

<?php

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

?>

...仍然输出 'Moo'。

但有时它能完成工作。
21
Unimagined at UnaimaginedDesigns dot Com
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 字符串的末尾删除。它对于清理用户发布到您网站的评论、文章或邮件很有用,可以确保没有额外的空白或空白行。
5
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);

}
//End of function 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!!!"
?>
-2
HW
21 年前
<?php
$text
= "This string contains some unwanted characters on the end.";
$text1 = rtrim($text, 'a..z');
$text1 = rtrim($text1, '.');
echo
$text1; // only the '.' is trimmed.
$text2 = rtrim($text, 'a..z.');
echo
$text2; // The whole last word is trimmed.
?>
-9
krzysiek dot 333 at gmail dot com
12 年前
function read_more($in,$len=160){
if(strlen($in)>$len){
return preg_replace('/[\s\.,][^\s\.,]*$/u', '', substr($in, 0, $len)).'...';
}else{
return $in;
}
}

echo read_mode("Lorem ipsum dolor sit amet, consectetur adipisicing elit. Proin nibh augue, suscipit a, scelerisque sed, lacinia in, mi. Cras vel lorem. Etiam pellentesque aliquet tellus. Phasellus pharetra nulla ac diam. Quisque semper justo at risus. Donec venenatis, turpis vel hendrerit interdum, dui ligula ultricies purus, sed posuere libero dui id orci.");
/* 输出
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Proin nibh augue, suscipit a, scelerisque sed, lacinia in, mi. Cras vel lorem. Etiam pellentesque...*/
-15
YAS
18 年前
要删除不需要的字符 - 例如 "." - 无论是否存在。

上面的例子没有包括没有 "." 的情况。
如果上面的例子中没有 ".",则最后一个单词将被删除。

祝你使用这段代码玩得开心。

<?php
$text
= "This string contains. some unwanted characters on the end .";
$text = trim($text);
$last = $text{strlen($text)-1};
if (!
strcmp($last,"."))
{
$text = rtrim($text, 'a..z');
$text = rtrim($text, '.');
}
?>
-12
andreipop2005 at gmail dot com
9 年前
修剪限制将非常有用。我创建了一个小助手函数来执行有限次数替换的 rtrim 操作。

<?php
function rtrim_limit($str, $delim, $count = 0)
{
if (
$count == 0) return rtrim($str, $delim);

$l = strlen($delim);
$k = 0;

while (
substr($str, -$l) == $delim && ($count == 0 || ($count > 0 && $k++ < $count))) {
$str = substr($str, 0, strlen($str) - $l);
}

return
$str;
}
?>
-17
匿名
10 年前
要 ltrim 或 rtrim 一个点,它必须被转义 ltrim('.1252', '\.')
-27
NBS Studio
14 年前
从文本文件中去除换行符的最简单方法是 ltrim()。

trim 或 explode 或 split ("\n" 或 "\r\n") 并非在所有情况下都有效,因此请尝试使用 ltrim()。
-29
info at nbs-studio dot com
14 年前
从文本文件中去除换行符的最简单方法是 ltrim()。

trim 或 explode 或 split ("\n" 或 "\r\n") 并非在所有情况下都有效,因此请尝试使用 ltrim()。
-38
pLIMP
12 年前
类似于 rtrim 的函数,它只会在 $charlist 中任何字符的第一个出现位置截断字符串。

<?php

function rstrip($string, $charlist = "\t ") {
// 从 charlist 中第一个出现的字符到字符串末尾的所有内容都被删除

$charlist = str_split($charlist);
$pos = strlen($string);

foreach (
$charlist as $char) {
$pos = min(strpos($string, $char), $pos);
}

$string_stripped = substr($string, 0, $pos);

return
$string_stripped;
}

?>
To Top