Удалить повторяющиеся косые черты

Я хотел бы определить с помощью php если строка типа $string содержит повторяющиеся конечные косые черты.

Например:

 $string = "http://somepage.com/something/some.html/////"; 

в

 $string = "http://somepage.com/something/some.html"; 

И я хочу сделать, if , если у него есть дубликат, что-то вроде:

 If ($string = "http://somepage.com/something/some.html/////";) { remove extra trailing slashes } //else do nothing... 

Related of "Удалить повторяющиеся косые черты"

Вы можете просто использовать rtrim() :

 $string = rtrim($string, '/'); 

Если вы по какой-то причине хотите сначала проверить, есть ли у нее косые черты, тогда вы можете проверить последний символ, например:

 if ($string[ strlen($string)-1 ] === '/') { $string = rtrim($string, '/'); } 

Выбрасывание строки через rtrim() не дорого, поэтому вам не нужно сначала проверять следы слэш.

Использование регулярных выражений для обрезки конечных косых черт немного завышено.

применять rtrim так

 $string = rtrim($string, '/'); 
 $string = rtrim($string, '/'); 

rtrim – лучшее решение, но так как вы отметили regex для полноты:

 $string = "http://somepage.com/something/some.html/////"; echo preg_replace('#/+$#','',$string); >>> http://somepage.com/something/some.html 

 # - Is the delimiter character /+ - Matches one or more forward slash $ - Matches the end of the string # - Delimiter Replace with '' - Nothing (empty string) 

Есть места, где / можно дублировать, например, вы можете получить доступ к своему вопросу через все эти ссылки:

Единственный double / который делает здесь различие, это http:// , поэтому давайте рассмотрим его. rtrim большинстве случаев я не могу работать с rtrim , поэтому давайте перейдем к регулярным выражениям.

Решение

 $parts = explode('//', $full_url, 2); $parts[1] = rtrim(preg_replace('@/+@', '/', $parts[1]), '/'); $full_url = implode('//', $parts); unset($parts); 

Онлайн-тест: http://ideone.com/1qHR9o

 Before: https://stackoverflow.com/questions/13990256/remove-duplicate-trailing-slashes/ After: https://stackoverflow.com/questions/13990256/remove-duplicate-trailing-slashes --------------------- Before: https://stackoverflow.com/questions/13990256/remove-duplicate-trailing-slashes//// After: https://stackoverflow.com/questions/13990256/remove-duplicate-trailing-slashes --------------------- Before: https://stackoverflow.com///questions///13990256///remove-duplicate-trailing-slashes//// After: https://stackoverflow.com/questions/13990256/remove-duplicate-trailing-slashes --------------------- Before: https://stackoverflow.com/questions//13990256/remove-duplicate-trailing-slashes// After: https://stackoverflow.com/questions/13990256/remove-duplicate-trailing-slashes --------------------- 

объяснение

Из вашего вопроса я понимаю, что вы всегда получаете полный URL-адрес, поэтому мы можем разделить его на две части:

 $parts = explode('//', $full_url, 2); 

Теперь мы удалим дублированный / с:

 preg_replace('@/+@', '/', $parts[1]) 

Затем мы удаляем добавочный / из конца строки:

 $parts[1] = rtrim( /*previous line*/ , '/'); 

И взорвать его обратно:

 $full_url = implode('//', $parts); unset($parts);