2009-06-23 22 views
10

El código siguiente elimina "www.", Etc. desde el comienzo de los sitios web que se ingresan en una base de datos. Funciona muy bien.PHP - Eliminar una barra inclinada desde el final de una URL

¿Hay alguna manera en la que podría usar un código similar para eliminar una barra inclinada del extremo posterior de un sitio web que se ingresa en la misma base de datos?

Gracias de antemano,

John

$remove_array = array('http://www.', 'http://', 'https://', 'https://www.', 'www.'); 
$site = str_replace($remove_array, "", $_POST['site']); 
+0

Utilice la función de búsqueda en este sitio. – Mat

Respuesta

18
$site = preg_replace('{/$}', '', $site); 

Este utiliza un relativamente simple regular expression. El $ significa que solo coincide con las barras al final de la cadena, por lo que no eliminará la primera barra en stackoverflow.com/questions/. Las llaves rizadas {} son solo delimitadores; PHP requiere caracteres coincidentes y el anverso y reverso de las expresiones regulares, por alguna razón tonta.

+0

Pensé que los caracteres a juego tenían que ser los mismos, es decir {y {pero no {y} – alex

+0

Además, los caracteres son útiles cuando desea suministrar indicadores. p.ej./ [a-z] */i significa unir todo de una manera no sensible a mayúsculas y minúsculas. – alex

+1

(), {}, [] y <> son excepciones. En mi humilde opinión, las banderas deben ser un parámetro separado. El 95% de las veces no tengo banderas y los delimitadores son solo ruido. –

3

Juan fue el primero y creo que su solución debe ser preferido, porque es forma más elegante, sin embargo aquí es otra:

$site = implode("/", array_filter(explode("/", $site))); 

actualización

Thx. He actualizado y ahora incluso se encarga de este tipo de cosas

$site = "///test///test//"; /* to => test/test */ 

Lo que probablemente hace que sea aún más frías que la respuesta aceptada;)

+0

Cool. Gracias por la respuesta. –

+0

-1 uh, eso no debería ser una solución, y no lo es. su código devuelve $ sitio tal como está (incluso lo probé). – stefs

+0

@Schnalle thx para la entrada. Actualizado! – merkuro

38

Usted puede pasar una cadena de caracteres que desea recorta de una cadena en el trim familia de funciones. Además, se puede utilizar para recortar rtrim sólo el final de la cadena:

$site = rtrim($site, "/"); 
+5

regexps son cañones, las barras posteriores son gorriones. aunque eliminaría algo más que barras oblicuas, por ejemplo, espacios, pestañas y saltos de línea: $ site = rtrim ($ site, "/ \ t \ n \ r"); – stefs

+6

también, rtrim elimina todas las barras inclinadas $ site = 'http://foo.bar////// ", mientras que la expresión regular solo elimina una barra inclinada. – stefs

+1

Esta debería ser la respuesta aceptada. No use la expresión regular a menos que realmente tiene que hacerlo. –

0

La solución más elegante es usar rtrim().

$url = 'http://www.domain.com/'; 

$urlWithoutTrailingSlash = rtrim($url, '/'); 

EDITAR

I se olvidó de rtrim();

También podría jugar alrededor de parse_url().

+0

Wow, hay muchas soluciones para este problema. ¡Gracias! –

1

¿Eso es lo que quieres?

$url = 'http://www.example.com/'; 

if (substr($url, -1) == '/') 
    $url = substr($url, 0, -1); 
-1
$new_string = preg_replace('|/$|', '', $string); 
+2

Usar regex para una tarea tan simple es exagerar. ¿Qué pasa con 'rtrim()'? –

-2

Tal vez una mejor solución sería utilizar .htaccess, pero php también puede hacerlo con algo como esto:

<?php 
    header('location: '.preg_replace("/\/$/","",$_SERVER['REQUEST_URI'])); 
?> 
5

método más simple:

$url = rtrim($url,'/'); 
1
$result = rtrim('example.com/', '/'); 
Cuestiones relacionadas