Tengo una cadena con una URL completa que incluye variables GET. ¿Cuál es la mejor forma de eliminar las variables GET? ¿Existe una buena forma de eliminar solo uno de ellos?
Este es un código que funciona pero no es muy bonito (creo):
$current_url = explode('?', $current_url);
echo $current_url[0];
El código anterior simplemente elimina todas las variables GET. En mi caso, la URL se genera desde un CMS, por lo que no necesito ninguna información sobre las variables del servidor.
Respuestas:
Ok, para eliminar todas las variables, quizás la más bonita sea
Vea
strtok
aquí .Es el más rápido (ver más abajo) y maneja las URL sin un '?' correctamente.
Para tomar una url + cadena de consulta y eliminar solo una variable (sin usar un reemplazo de expresiones regulares, que puede ser más rápido en algunos casos), puede hacer algo como:
Un reemplazo de expresiones regulares para eliminar una sola var podría verse así:
Aquí están los tiempos de algunos métodos diferentes, asegurando que el tiempo se reinicie entre ejecuciones.
muestra
strtok gana y es, con mucho, el código más pequeño.
fuente
Qué tal si:
fuente
/(\\?|&)the-var=.*?(&|$)/
para eliminar solo una variable específica (the-var
aquí).Si la URL de la que está intentando eliminar la cadena de consulta es la URL actual del script PHP, puede utilizar uno de los métodos mencionados anteriormente. Si solo tiene una variable de cadena con una URL y desea eliminar todo lo que pasa después del '?' tu puedes hacer:
fuente
?
. Su código luego devolverá una cadena vacía.$url = ($pos)? substr($url, 0, $pos) : $url;
Inspirado por el comentario de @MitMaro, escribí un pequeño benchmark para probar la velocidad de las soluciones de @Gumbo, @Matt Bridges y @justin la propuesta en la pregunta:
Resultado: el strtok de @ justin es el más rápido.
Nota: probado en un sistema Debian Lenny local con Apache2 y PHP5.
fuente
Otra solución ... Encuentro esta función más elegante, también eliminará el final '?' si la clave a eliminar es la única en la cadena de consulta.
Pruebas:
Saldrá:
»Ejecute estas pruebas en 3v4l
fuente
¿No podrías usar las variables del servidor para hacer esto?
¿O funcionaría esto ?:
Solo un pensamiento.
fuente
Puede utilizar las variables de servidor para esto, por ejemplo
$_SERVER['REQUEST_URI']
, o incluso mejor:$_SERVER['PHP_SELF']
.fuente
fuente
¿Qué tal una función para reescribir la cadena de consulta recorriendo la matriz $ _GET?
! Esquema aproximado de una función adecuada
Algo como esto sería bueno para tenerlo a mano para los enlaces de paginación, etc.
fuente
basename($_SERVER['REQUEST_URI'])
devuelve todo después e incluido el '?',En mi código, a veces solo necesito secciones, así que sepárelo para poder obtener el valor de lo que necesito sobre la marcha. No estoy seguro de la velocidad de rendimiento en comparación con otros métodos, pero es realmente útil para mí.
fuente
En mi opinión, la mejor forma sería esta:
Comprueba si hay un parámetro GET 'i' y lo elimina si lo hay.
fuente
simplemente use javascript echo'd para eliminar la URL de cualquier variable con un formulario en blanco de autoenvío:
Luego haz esta función de javascript:
fuente