[PHP] URL filtern

Entwerder mittels https://php.net/manual/de/function.parse-url.php (und das dann filtern)

oder mit einem regulären Ausdruck:
PHP:
if( preg_match('/^(?:\w+:\/\/)?(?:[^\/]+\.)*(\w+\.\w+)(?:$|\/)/', $url, $match) !== false ) {
   $host = $match[1];
   echo $host;
}

/* result:
test.de	<--	https://2.test.de/12.index?id=1
test.de	<--	https://zwei.2.test.de/12.index?id=1
test.de	<--	2.test.de/12.index?id=1
test.de	<--	https://2.test.de
test.de	<--	www.test.de
test.de	<--	test.de
*/
 
Zuletzt bearbeitet:
Entwerder mittels https://php.net/manual/de/function.parse-url.php

oder mit einem regulären Ausdruck (habe ich jetzt nur schnell zusammen geschrieben, kann sein, dass das nicht funktioniert ;)):
Code:
if( preg_match('/^(?:\w+:\/\/)?[^\/]*(\w+\.\w+)[$|\/]/', $url, $match) !== false ) {
   $host = $match[1];
   echo $host;
}
Pattern gibt bei
https://2.test.de/?buchung=459

https://2.test.de/
aus.

Das Problem ist das bei
url_prase
[host] = 2 raus kommt anstatt von test.de
 
Ich hab den pattern korrigiert, schau dir mein vorheriges post nochmals an. Jetzt funktioniert er.
 
PHP:
	if( preg_match('/^(?:\w+:\/\/)?(?:[^\/]+\.)*([^\.\/]+\.\w+)(?:$|\/)/', $url, $match) !== false ) {
		$host = $match[1];
		echo $host;
	}

/*
test.de	<--	https://2.test.de/12.index?id=1
test.de	<--	https://zwei.2.test.de/12.index?id=1
test.de	<--	2.test.de/12.index?id=1
test.de	<--	https://2.test.de
test.de	<--	www.test.de
test.de	<--	test.de
tt-1.de	<--	1-f.tt-1.de
*/

Es wird nun alles mögliche durchgelassen, wenn die URL korrekt ist.
D.h. wenn es eine url gibt, die so lautet: www.t#.de, dann wird das ebenfalls als t#.de angezeigt, obwohl das keine korrekte url ist. Wenn dir das so reicht? Ansonsten wird der pattern etwas länger ;)
 
Wenn bei parse_url() bei Dir beim Host nur 2 rauskommt, machst Du irgendwas grundlegend falsch:
PHP:
<?php
	Header('Content-Type: text/plain');

	$url = 'https://2.test.de/12.index?id=1';
	$url_parts = parse_url($url);
	$plain_host = implode('.', array_slice(explode('.', $url_parts['host']), -2));

	print_r($url_parts);
	print_r($plain_host);
?>
Ergibt bei mir folgenden Ouput:
Code:
Array
(
    [scheme] => http
    [host] => 2.test.de
    [path] => /12.index
    [query] => id=1
)
test.de
Ich geb zu, über das implode(explode()) kann man streiten...