tpow
Tengo algunos enlaces en una presentación de Powerpoint y, por alguna razón, cuando se hace clic en esos enlaces, se agrega un parámetro de retorno a la URL. Bueno, ese parámetro de retorno está causando que el patrón MVC de mi sitio Joomla se estropee.
¿Cuál es una forma eficiente de eliminar este parámetro de retorno usando PHP?
Ejemplo:
http://mydomain.example/index.php?id=115&Itemid=283&return=aHR0cDovL2NvbW11bml0
marc b
El método “correcto” más seguro sería:
- Analizar la url en una matriz con
parse_url()
- Extraiga la parte de la consulta, descomponga eso en una matriz usando
parse_str()
- Elimine los parámetros de consulta que desee
unset()
ellos de la matriz - Reconstruye la URL original usando
http_build_query()
Rápido y sucio es usar una cadena de búsqueda/reemplazo y/o expresión regular para eliminar el valor.
-
mmm raro, mi
$parsedurl['query']
es una sola cadena que contiene todos los parámetros– ajax333221
10 de abril de 2014 a las 3:01
-
ejemplo: stackoverflow.com/questions/1251582/…
– Ari
1 de septiembre de 2015 a las 1:34
-
¿Puede dar un ejemplo de escenario en el que fallaría la expresión regular sucia?
– Vicente
25 de abril de 2020 a las 5:13
-
Por favor, da un ejemplo.
– Jones G.
14 de noviembre de 2020 a las 8:39
-
parse_url() tiene errores. No es seguro usarlo en absoluto.
– Holden321
7 ene a las 19:04
Lars Koudal
En un hilo diferente, Justin sugiere que la forma más rápida es usar strtok()
$url = strtok($url, '?');
Vea su respuesta completa con pruebas de velocidad también aquí: https://stackoverflow.com/a/1251650/452515
-
La pregunta era cómo eliminar la variable GET específica
return
y no eliminar todas las variables GET.– mgutt
17 de enero de 2020 a las 8:57
Serguéi Telshevski
esto es para complementar marc bLa respuesta de con un ejemplo, aunque puede parecer bastante larga, es una forma segura de eliminar un parámetro. En este ejemplo eliminamos page_number
<?php
$x = 'http://url.example/search/?location=london&page_number=1';
$parsed = parse_url($x);
$query = $parsed['query'];
parse_str($query, $params);
unset($params['page_number']);
$string = http_build_query($params);
var_dump($string);
-
Gracias Sergey, y gracias @Marc B, excelente ayuda.
– luke_mclachlan
6 de marzo de 2015 a las 14:52
-
Comente a cualquiera que se encuentre usando este código que esto solo devuelve la cadena de consulta (menos el parámetro que ha eliminado). Ya no tendrá una URL completa, si eso es lo que desea.
– Código mono
15/11/2018 a las 18:00
function removeParam($url, $param) {
$url = preg_replace('/(&|\?)'.preg_quote($param).'=[^&]*$/', '', $url);
$url = preg_replace('/(&|\?)'.preg_quote($param).'=[^&]*&/', '$1', $url);
return $url;
}
nikic
parse_str($queryString, $vars);
unset($vars['return']);
$queryString = http_build_query($vars);
parse_str
analiza una cadena de consulta, http_build_query
crea una cadena de consulta.
Implementación procesal de la respuesta de Marc B después de refinar la respuesta de Sergey Telshevsky.
function strip_param_from_url($url, $param)
{
$base_url = strtok($url, '?'); // Get the base URL
$parsed_url = parse_url($url); // Parse it
if(array_key_exists('query',$parsed_url)) // Only execute if there are parameters
$query = $parsed_url['query']; // Get the query string
parse_str($query, $parameters); // Convert Parameters into array
unset($parameters[$param]); // Delete the one you want
$new_query = http_build_query($parameters); // Rebuilt query string
$url =$base_url.'?'.$new_query; // Finally URL is ready
}
return $url;
}
// Usage
echo strip_param_from_url( 'http://url.example/search/?location=london&page_number=1', 'location' )
aaron hathaway
podrías hacer un preg_replace
me gusta:
$new_url = preg_replace('/&?return=[^&]*/', '', $old_url);
-
No es una buena idea si “?return=” no es el último parámetro. Una consulta como “urlerror.com/index.php?return=1&test=abc” se cambiaría a “urlerror.com/index.php&test=abc”
– kraftb
18 de noviembre de 2013 a las 13:54
-
preg_replace(‘/return=[^&]?&?/i’, ”, $_SERVIDOR[‘REQUEST_URI’]);
– Chris Greenwood
27 mayo 2014 a las 16:32
-
Esta respuesta es incorrecta. Análisis: stackoverflow.com/a/47527628/318765
– mgutt
28 de noviembre de 2017 a las 9:33
posible duplicado de Beautiful way para eliminar variables GET con PHP?
– PiElNúmero
5 de marzo de 2013 a las 12:17