rtrim默认仅删除末尾空白字符;若删指定字符,需传入包含所有目标字符的字符串作为第二参数,逐字符匹配而非子串匹配,不支持数组或正则。

rtrim 默认只删末尾空白字符(空格、制表符、换行等)。若要删末尾**指定字符**,需传入第二个参数 —— 一个包含所有要删除字符的字符串。
基本写法:传入字符集字符串
第二个参数不是单个字符,而是“字符集合”,其中每个字符都会被独立匹配并从末尾移除(直到遇到不在该集合中的字符为止)。
- 例如:
rtrim('abc123xx', 'x')→'abc123' - 删多种字符:
rtrim('abc123xyy', 'xy')→'abc123'(末尾的y和x都会被删,顺序无关) - 注意:只作用于末尾,且是“逐个字符”判断,不是按子串匹配。所以
rtrim('abcxxx', 'xy')仍得'abc',但rtrim('abcxy', 'xy')也得'abc'(因为末尾y在集合里,删掉后剩下x也在集合里,继续删)
常见易错点
不要传数组或正则 —— rtrim 不支持。它第二个参数必须是字符串。
- ❌ 错误:
rtrim('a-b-', ['-', '_'])(PHP 会报 Warning,实际当作字符串Array处理) - ❌ 错误:
rtrim('a-b-', '/[-_]/')(这是正则,rtrim 不识别) - ✅ 正确:
rtrim('a-b-', '-_')→'a-b'(删掉末尾所有-和_)
需要删固定后缀(如完整字符串)?用 str_replace 或 preg_replace
rtrim 是按字符删,不是按子串删。 如果你想删的是固定后缀(比如总是删掉末尾的 '_old'),不能依赖 rtrim:
- ❌
rtrim('file_old', '_old')→ 实际删的是'dlo_'中任意字符,结果可能是'file',也可能不是(比如'file_old_old'会变成'file',但'file_xold'可能只删掉d和l…不可控) - ✅ 推荐方式:
用substr+str_ends_with(PHP 8.0+):if (str_ends_with($s, '_old')) $s = substr($s, 0, -4);
或兼容旧版:$suffix = '_old'; if (substr($s, -strlen($suffix)) === $suffix) $s = substr($s, 0, -strlen($suffix));
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











