¿Cómo puedo obtener parámetros de una cadena URL?
Tengo un campo de formulario HTML $_POST["url"]
que tiene algunas cadenas de URL como valor.
Los valores de ejemplo son:
https://example.com/test/ [email protected] https://example.com/test/ 1234?basic=2&[email protected] https://example.com/test/ [email protected] https://example.com/test/ [email protected] &testin=123 https://example.com/test/the-page-here/ 1234?someurl=key&[email protected]
etc.
¿ Cómo puedo obtener solo el email
parámetro de estas URL/valores?
Tenga en cuenta que no obtengo estas cadenas de la barra de direcciones del navegador.
Puedes usar parse_url()
y parse_str()
para eso.
$parts = parse_url($url);
parse_str($parts['query'], $query);
echo $query['email'];
Si desea obtener $url
dinámicamente con PHP, eche un vistazo a esta pregunta:
Obtenga la URL completa en PHP
?
Se puede acceder a todos los parámetros siguientes mediante $_GET
una matriz. Entonces,
echo $_GET['email'];
extraerá los correos electrónicos de las URL.
Utilice los métodos parse_url() y parse_str() . parse_url()
analizará una cadena URL en una matriz asociativa de sus partes. Dado que solo desea una parte de la URL, puede usar un acceso directo para devolver un valor de cadena con solo la parte que desea. A continuación, parse_str()
creará variables para cada uno de los parámetros en la cadena de consulta. No me gusta contaminar el contexto actual, por lo que al proporcionar un segundo parámetro se colocan todas las variables en una matriz asociativa.
$url = "https://mysite.com/test/[email protected]&testin=123";
$query_str = parse_url($url, PHP_URL_QUERY);
parse_str($query_str, $query_params);
print_r($query_params);
//Output: Array ( [email] => [email protected] [testin] => 123 )
Como se mencionó en otra respuesta, la mejor solución es usar parse_url()
.
Necesitas usar una combinación de parse_url()
y parse_str()
.
Analiza parse_url()
la URL y devuelve sus componentes para que pueda obtener la cadena de consulta utilizando la query
clave. Entonces deberías usar parse_str()
eso analiza la cadena de consulta y devuelve valores en una variable.
$url = "https://example.com/test/1234?basic=2&[email protected]";
parse_str(parse_url($url)['query'], $params);
echo $params['email']; // [email protected]
También puedes hacer este trabajo usando expresiones regulares :preg_match()
Puede utilizarlo preg_match()
para obtener un valor específico de la cadena de consulta de una URL.
preg_match("/&?email=([^&]+)/", $url, $matches);
echo $matches[1]; // [email protected]
preg_replace()
¡ También puedes usar preg_replace()
para hacer este trabajo en una sola línea!
$email = preg_replace("/^https?:\/\/.*\?.*email=([^&]+).*$/", "$1", $url);
// [email protected]