2011-06-14 13 views

Respuesta

9

utilizando el signo más + en expresiones regulares significa la aparición de uno o más del carácter anterior. Así podemos añadir que en un preg_replace para reemplazar la ocurrencia de uno o más / por sólo uno de ellos

$url = "site.com/edition/new///"; 

$newUrl = preg_replace('/(\/+)/','/',$url); 

// now it should be replace with the correct single forward slash 
echo $newUrl 
+0

Gran idea pero ¿cómo puedo hacer la comprobación después de 'edición' Como este ejemplo $ url = "site.com/edition///new///"; $ newUrl = preg_replace ('/ edition (\/+) /', '/', $ url); No sé aplicar – Lelis

+0

si url era 'http: //test.com/edition ///// new' ¡no funcionará! –

0

Editar: Ha leí esta pregunta como "sin preg" oh bien: 3

function removeabunchofslashes($url){ 
    $explode = explode('://',$url); 
    while(strpos($explode[1],'//')) 
    $explode[1] = str_replace('//','/',$explode[1]); 
    return implode('://',$explode); 
} 

echo removeabunchofslashes('http://www.site.com/edition////new///'); 
0

http://domain.com/test/test/>http://domain.com/test/test

# Strip trailing slash(es) from uri 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+?)[/]+$ $1 [NC,R,L] 

http://domain.com//test//test//>http://domain.com/test/test/

# Merge multiple slashes in uri 
RewriteCond %{THE_REQUEST} ^[A-Z]+\ //*(.+)//+(.*)\ HTTP 
RewriteRule^/%1/%2 [R,L] 
RewriteCond %{THE_REQUEST} ^[A-Z]+\ //+(.*)\ HTTP 
RewriteRule^/%1 [R,L] 

Cambio R a R = 301 si todo funciona bien después de la prueba ...

¿Alguien sabe cómo preservar las barras diagonales dobles en la consulta utilizando el método anterior?

(Por ejemplo:? /? // prueba prueba prueba // = // test de prueba>/test/prueba/test = prueba // test)

15
$url = 'http://www.abc.com/def/git//ss'; 
$url = preg_replace('/([^:])(\/{2,})/', '$1/', $url); 
// output http://www.abc.com/def/git/ss 

$url = 'https://www.abc.com/def/git//ss'; 
$url = preg_replace('/([^:])(\/{2,})/', '$1/', $url); 
// output https://www.abc.com/def/git/ss 
+0

Buena respuesta, ¿podría explicar cómo funciona esta expresión regular? – Gihan

+3

Pruebe esta herramienta https://regex101.com –

+0

En la herramienta vinculada por @ ツ Liverbool paste '([^:]) (\/{2,})' como la expresión regular, luego pegue $ url como cadena de prueba o cualquier otra url que quiere probar – briankip

-1

simple, comprobar este ejemplo:

$url ="http://portal.lojav1.local//Settings////messages"; 
echo str_replace(':/','://', trim(preg_replace('/\/+/', '/', $url), '/')); 

de salida:

http://portal.lojav1.local/Settings/messages 
+0

Esto mata su url (http: // se convierte en http: /) – RMK

+0

@RMK ¡tiene usted razón! Yo actualice. – Offboard

Cuestiones relacionadas