PHP eliminando un carácter en una cadena

2 minutos de lectura

avatar de usuario
Cero fresco

Mi php es débil y estoy tratando de cambiar esta cadena:

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

ser – estar:

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!

  • Debería marcar la respuesta de CMS como la correcta.

    – falta de párpados

    5 de noviembre de 2008 a las 6:50

Creo que es mejor usar simplemente str_replacecomo dice el manual:

Si no necesita reglas de reemplazo sofisticadas (como expresiones regulares), siempre debe usar esta función en lugar de ereg_replace() o preg_replace().

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

avatar de usuario
falta de párpados

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

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

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

    – pestilence669

    1 oct 2011 a las 22:01

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

    – falta de párpados

    2 oct 2011 a las 18:21

Si bien una expresión regular se adaptaría bien aquí, le presentaré un método alternativo. Eso puede que 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;
  }
}

Extraño, lo sé.

  • Eh, ¿y si $urlString[$i+1] no es /?

    – falta de párpados

    5 de noviembre de 2008 a las 6:45

  • falta de párpados: el problema no presentaba ese caso, por lo que mi solución tampoco lo tuvo en cuenta. MDCore: por favor explique, ¿por qué?

    – Henrik Paul

    5 de noviembre de 2008 a las 7:16

  • Me he encontrado con un problema donde es útil. Si su cadena tiene un tamaño del orden de megas (puede suceder), ejecutar preg_replace o str_replace correrá el riesgo de alcanzar el límite de memoria de su php.ini. El código pcre_replace en php siempre duplica el tamaño de la cadena antes de hacer nada, por lo que puede ser un problema.

    – Bob Gettys

    26 de marzo de 2009 a las 16:15

  • Partiendo de mi comentario anterior, si su cadena es realmente enorme, puede hacer algunos trucos de strpos para encontrar las piezas correctas, preg_match las y luego use la notación de paréntesis anterior para eliminar los caracteres que no desea. Úselo con cuidado, ya que no es rápido, pero ahorrará memoria.

    – Bob Gettys

    26 de marzo de 2009 a las 16:16

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

¿Ha sido útil esta solución?