actual - php url request
¿Cómo eliminar http://, www y slash de URL en PHP? (6)
Necesito una función php que produzca un nombre de dominio puro desde la URL. Así que esta función debe eliminarse de las partes http://
, www
y /
(barra diagonal) de la URL si estas partes existen. Aquí hay ejemplos de entradas y salidas: Entrada -> http://www.google.com/ | Salida -> google.com
Entrada -> http://google.com/ | Salida -> google.com
Entrada -> www.google.com/ | Salida -> google.com
Entrada -> google.com/ | Salida -> google.com
Entrada -> google.com | Salida -> google.com
Comprobé la función parse_url
, pero no devuelve lo que necesito. Desde entonces, soy principiante en PHP, fue difícil para mí. Si tienes alguna idea, por favor responde.
Gracias por adelantado.
Hay muchas maneras de tomar el dominio de una url que he publicado 4 formas a continuación, comenzando desde la más corta hasta la más larga.
# 1
function urlToDomain($url) {
return implode(array_slice(explode(''/'', preg_replace(''/https?:////(www/.)?/'', '''', $url)), 0, 1));
}
echo urlToDomain(''http://www.example.com/directory/index.php?query=true'');
# 2
function urlToDomain($url) {
$domain = explode(''/'', preg_replace(''/https?:////(www/.)?/'', '''', $url));
return $domain[''0''];
}
echo urlToDomain(''http://www.example.com/directory/index.php?query=true'');
# 3
function urlToDomain($url) {
$domain = preg_replace(''/https?:////(www/.)?/'', '''', $url);
if ( strpos($domain, ''/'') !== false ) {
$explode = explode(''/'', $domain);
$domain = $explode[''0''];
}
return $domain;
}
echo urlToDomain(''http://www.example.com/directory/index.php?query=true'');
# 4
function urlToDomain($url) {
if ( substr($url, 0, 8) == ''https://'' ) {
$url = substr($url, 8);
}
if ( substr($url, 0, 7) == ''http://'' ) {
$url = substr($url, 7);
}
if ( substr($url, 0, 4) == ''www.'' ) {
$url = substr($url, 4);
}
if ( strpos($url, ''/'') !== false ) {
$explode = explode(''/'', $url);
$url = $explode[''0''];
}
return $url;
}
echo urlToDomain(''http://www.example.com/directory/index.php?query=true'');
Todas las funciones anteriores devuelven la misma respuesta: example.com
Intenta esto, eliminará lo que querías (http :: //, www y barra diagonal) pero conservará otros subdominios como example.google.com
$host = parse_url(''http://www.google.com'', PHP_URL_HOST);
$host = preg_replace(''/^(www/.)/i'', '''', $host);
Use parse_url
$input = ''www.google.co.uk/'';
// in case scheme relative URI is passed, e.g., //www.google.com/
$input = trim($input, ''/'');
// If scheme not included, prepend it
if (!preg_match(''#^http(s)?://#'', $input)) {
$input = ''http://'' . $input;
}
$urlParts = parse_url($input);
// remove www
$domain = preg_replace(''/^www/./'', '''', $urlParts[''host'']);
echo $domain;
// output: google.co.uk
Funciona correctamente con todas tus entradas de ejemplo.
$str = ''http://www.google.com/'';
$str = preg_replace(''#^https?://#'', '''', rtrim($str,''/''));
echo $str; // www.google.com
if (!preg_match(''/^http(s)?://///'', $url))
$url = ''http://'' . $url;
$host = parse_url($url, PHP_URL_HOST);
$host = explode(''.'', strrev($host));
$host = strrev($host[1]) . ''.'' strrev($host[0]);
Esto devolvería el dominio de segundo nivel, aunque sería inútil para los dominios .co.uk, por lo que es posible que desee hacer más comprobaciones e incluir partes adicionales si strrev ($ host [0]) es uk, au, etc.