2012-05-24 26 views
16

lo que la cadena de casos de prueba pueden ser:PHP eliminar caracteres después de la última aparición de un caracter en una cadena

http://example.com/?u=ben 

O

http://example.com 

Estoy tratando de eliminar todo después de la última aparición de a '/' pero solo si no es parte de 'http: //'. ¿¡Es posible!?

tengo esto hasta ahora:

$url = substr($url, 0, strpos($url, '/')); 

Pero no funciona, se despoja de todo después de la primera '/'.

+0

No sé para qué lo usa, pero si intenta quitar los códigos de seguimiento de campaña, las URL resultantes generalmente funcionarán, pero no siempre ;-) Por ejemplo, creo que YouTube necesita el "?" –

Respuesta

13

Se debe utilizar la herramienta que está diseñada para este tipo de trabajo, parse_url

url.php

<?php 

$urls = array('http://example.com/foo?u=ben', 
       'http://example.com/foo/bar/?u=ben', 
       'http://example.com/foo/bar/baz?u=ben', 
       'https://foo.example.com/foo/bar/baz?u=ben', 
      ); 


function clean_url($url) { 
    $parts = parse_url($url); 
    return $parts['scheme'] . '://' . $parts['host'] . $parts['path']; 
} 

foreach ($urls as $url) { 
    echo clean_url($url) . "\n"; 
} 

Ejemplo:

·> php url.php                         
http://example.com/foo 
http://example.com/foo/bar/ 
http://example.com/foo/bar/baz 
https://foo.example.com/foo/bar/baz 
0
$cutoff = explode("char", $string); 
echo $cutoff[0]; // 2 for what you want and 3 for the index 

también

eco str_replace ("http: //", "", $ cadena);

+0

Creo que debería ser $ cutoff [1]; en lugar del índice 0 (si entiendo tu guión). Además, no entiendo por qué explotas "char"? –

+0

"char" = "/", en cuanto al índice 0 - Escribí comentarios también – Seb

61

Debe utilizar strrpos no funcionan strpos ;-)

substr($url, 0, strrpos($url, '/')); 
+4

¡Creo que esta es la mejor respuesta al título de la pregunta! Editaría el título a algo así como "... personaje en una URL" si no fuera por esta respuesta. –

+1

si no se encuentra, elimina todo, cualquier modificación para este – mokNathal

+0

@mokNathal es feo pero ... 'substr ($ url, 0, strrpos ($ url, '/')! == falso? Strrpos ($ url, '/'): strlen ($ url)); ' – billynoah

Cuestiones relacionadas