Usuń końcowy ukośnik z ciągu PHP

101

Czy można usunąć końcowy ukośnik /z ciągu znaków za pomocą PHP?

Zac Brown
źródło

Odpowiedzi:

235

Jasne, po prostu sprawdź, czy ostatni znak jest ukośnikiem, a następnie nuke to.

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

Inną (prawdopodobnie lepszą) opcją byłoby użycie rtrim()- ta usuwa wszystkie końcowe ukośniki:

$string = rtrim($string, '/');
ThiefMaster
źródło
Sugerowałbym również używanie DIRECTORY_SEPARATORzamiast '/' ścieżek plików, aby działało na wszystkich platformach.
Brad
61

To usuwa końcowe ukośniki:

$str = rtrim($str, '/');
Ross
źródło
13
Zauważ, że usuwa to wszystkie końcowe ukośniki.
Gumbo
24

Od dawna akceptowałem, jednak w moich powiązanych poszukiwaniach natknąłem się tutaj i dodaję dla „kompletności”; rtrim()jest świetny, jednak zaimplementowany w ten sposób:

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

Zapewnia przenośność z * nix do Windows , ponieważ zakładam, że to pytanie dotyczy radzenia sobie ze ścieżkami.

Dan Lugg
źródło
1
ciekawy! jednak na końcu natknąłem się tutaj na trasy , a nie ścieżki
Félix Gagnon-Grenier
1
@ FélixGagnon-Grenier Cóż, odpowiedź jest nieco arogancka, jeśli chodzi o troskę o ścieżki; PO mógł mieć zupełnie inne powody. Ponieważ „trasy” zazwyczaj działają na „ścieżkach” ( w pewnym sensie ), koniec końców wszystko jest takie samo :-)
Dan Lugg,
W przypadku, gdy operator rzeczywiście chciałby usunąć końcowy separator katalogu ze ścieżki, użyj stałej DIRECTORY_SEPARATORzamiast '/\\'.
Jens
@Jens Zgodziłbym się, jednak skoro PHP obsługuje ścieżki * nix i Windows, przypadki narożników mogą pozostać nieobcięte.
Dan Lugg
@NorthbornDesign: Czy masz przykład? Masz na myśli przycinanie ścieżki * nix w systemie Windows i odwrotnie, a nie tylko ścieżki natywne?
Jens,
4

rtrim Używa rtrim, ponieważ szanuje łańcuch nie kończy się końcowym ukośnikiem

Breezer
źródło
2
Tyle że tak naprawdę nie usuwa końcowych ukośników, ale usuwa cudzysłowy z ciągu.
user502515
cóż, przegapiłem końcową część w pytaniu ... popełniłem błąd i konkretnie napisałem, że usuwa wszystkie ukośniki
Breezer