Remover barra final de string PHP

101

É possível remover a barra final /de uma string usando PHP?

Zac Brown
fonte

Respostas:

235

Claro que é, simplesmente verifique se o último caractere é uma barra e então detone aquele.

if(substr($string, -1) == '/') {
    $string = substr($string, 0, -1);
}

Outra opção (provavelmente melhor) seria usar rtrim()- esta remove todas as barras finais:

$string = rtrim($string, '/');
ThiefMaster
fonte
Eu também sugiro usar em DIRECTORY_SEPARATORvez de '/' se usar caminhos de arquivo para que funcione em todas as plataformas.
Brad
61

Isso remove as barras finais:

$str = rtrim($str, '/');
Ross
fonte
13
Observe que isso remove todas as barras finais.
Gumbo
24

Aceito há muito tempo, porém, em minhas pesquisas relacionadas, tropecei aqui e estou adicionando para "completude"; rtrim()é ótimo, porém implementado assim:

$string = rtrim($string, '/\\'); //strip both forward and back slashes

Ele garante a portabilidade de * nix para o Windows , pois presumo que essa questão se refira ao tratamento de caminhos.

Dan Lugg
fonte
1
interessante! no entanto, do meu lado tropecei aqui em relação a rotas , não caminhos
Félix Gagnon-Grenier
1
@ FélixGagnon-Grenier Bem, a resposta é um tanto presunçosa com relação aos caminhos; o OP pode ter tido razões totalmente diferentes. Como as "rotas" normalmente atuam em "caminhos" ( de algum tipo ), é tudo igual no final :-)
Dan Lugg
No caso do Op realmente querer remover um separador de diretório final de um caminho, use a constante em DIRECTORY_SEPARATORvez de '/\\'.
Jens
@Jens, eu concordo, entretanto, como o PHP suporta * nix e caminhos do Windows, alguns casos podem ficar sem corte.
Dan Lugg
@NorthbornDesign: Você tem um exemplo? Você quer dizer cortar um caminho * nix no Windows e vice-versa, não apenas caminhos nativos?
Jens
4

rtrim Use rtrim porque ele respeita a string não termina com uma barra final

Breezer
fonte
2
Exceto que isso não remove realmente as barras finais, mas remove as aspas de uma string.
user502515
bem, eu perdi a parte final da pergunta ... Eu cometi um erro e escrevi especificamente que ele remove todas as barras
Breezer