¿Cómo puedo obtener parámetros de una cadena URL?

Resuelto Asim Zaidi asked hace 54 años • 13 respuestas

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 emailparámetro de estas URL/valores?

Tenga en cuenta que no obtengo estas cadenas de la barra de direcciones del navegador.

Asim Zaidi avatar Jan 01 '70 08:01 Asim Zaidi
Aceptado

Puedes usar parse_url()y parse_str()para eso.

$parts = parse_url($url);
parse_str($parts['query'], $query);
echo $query['email'];

Si desea obtener $urldinámicamente con PHP, eche un vistazo a esta pregunta:

Obtenga la URL completa en PHP

Ruel avatar Jul 14 '2012 03:07 Ruel

?Se puede acceder a todos los parámetros siguientes mediante $_GETuna matriz. Entonces,

echo $_GET['email'];

extraerá los correos electrónicos de las URL.

hjpotter92 avatar Jul 14 '2012 03:07 hjpotter92

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 ) 
JCotton avatar Jul 14 '2012 04:07 JCotton

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 queryclave. 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]
Mohammad avatar Nov 11 '2018 09:11 Mohammad