2008-11-05 9 views
29

Mi php es débil y estoy tratando de cambiar esta cadena:PHP eliminación de un carácter en una cadena

http://www.example.com/backend.php?/c=crud&m=index&t=care 
           ^

a ser:

http://www.example.com/backend.php?c=crud&m=index&t=care 
           ^

la eliminación de la / después de la backend.php?. ¿Alguna idea sobre la mejor manera de hacer esto?

Gracias!

+0

en realidad se debe marcar la respuesta de CMS como la correcta. – eyelidlessness

Respuesta

95

creo que es mejor utilizar simplemente str_replace, al igual que el manual dice:

Si usted no necesita de fantasía reemplazando reglas (como expresiones regulares), que siempre debe usar esta función vez de ereg_replace() o preg_replace().

<? 
$badUrl = "http://www.site.com/backend.php?/c=crud&m=index&t=care"; 
$goodUrl = str_replace('?/', '?', $badUrl); 
+1

Tienes mi voto. – eyelidlessness

+0

gracias párpado; – CMS

8
$str = preg_replace('/\?\//', '?', $str); 

Editar: Ver la respuesta de CMS. Es tarde, debería saberlo mejor.

+0

Gracias, eso es perfecto. –

+2

str_replace es deslumbrantemente más rápido que una expresión regular. – pestilence669

+1

@Pestilence, por eso recomendé la respuesta de CMS. – eyelidlessness

0

Mientras que una expresión regular se adaptaría aquí bien, le presentaré un método alternativo. Es podría ser un poco más rápido que la expresión regular equivalente, pero la vida se trata de opciones (... o algo así).

$length = strlen($urlString); 
for ($i=0; $i<$length; i++) { 
    if ($urlString[$i] === '?') { 
    $urlString[$i+1] = ''; 
    break; 
    } 
} 

Weird, lo sé.

+0

Er, ¿y si $ urlString [$ i + 1] no es /? – eyelidlessness

+1

párpados: el problema no presentó ese caso, por lo que mi solución tampoco lo tuvo en cuenta. MDCore: elabora, ¿por qué? –

+0

Me encontré con un problema donde es útil. Si su cadena es del orden de megs en tamaño (puede suceder), ejecutar preg_replace o str_replace correrá el riesgo de golpear el memory_limit de su php.ini. El código pcre_replace en php siempre mallocs 2 veces su tamaño de cadena antes de hacer cualquier cosa, por lo que puede ser un problema. –

0
$splitPos = strpos($url, "?/"); 
if ($splitPos !== false) { 
    $url = substr($url, 0, $splitPos) . "?" . substr($url, $splitPos + 2); 
} 
Cuestiones relacionadas