URL überprüfen

Hallo,

ich versuche bereits seit einigen Stunden eine URL zu überprüfen. Zusert habe ich folgendes probiert:

if (filter\_var($url, FILTER\_VALIDATE\_URL) == false) {
 // Fehler
}

Allerdings sind URLs wie „http://test“ gültig. Daher habe ich auch gleich nach einem passenden Regex gesucht:

// siehe http://www.krio.me/how-to-validate-a-url-php
$regex = '/^(http):\/\/([A-Z0-9][A-Z0-9\_-]\*(?:\.[A-Z0-9][A-Z0-9\_-]\*)+):?(\d+)?\/?/i';
if (!preg\_match($regex, $url)) {
 //Fehler
}

Leider nicht optimal, da Leerzeichen im URL möglich sind (z.B. http://test.com de). Also auf zum nächsten Regex:

// siehe http://www.mykeblack.com/scripts/php/form-validation/php-check-for-valid-url-syntax
$regex = '#^(http:\/\/|https:\/\/|www\.)(([A-Z0-9][A-Z0-9\_-]\*)(\.[A-Z0-9][A-Z0-9\_-]\*)+)(:frowning:\d+))?(\/)\*$#i';
if (!preg\_match($regex, $url)) {
 //Fehler
}

Hier sind wiederum URLs wie „http://test.com/test/test.html“ ungültig. Ich suche keine perfekte Lösung, da ich diese vermutlich ohnehin nicht finde. Aber hat jemand eine Idee, was ich noch probieren könnte?

Schöne Grüße, Elo

hallo!

so auch ok?

$url = ‚http://wuse.de/‘;
$handle = @fopen($url,‚r‘);
if($handle !== false){
echo ‚url existiert‘;
}
else{
echo ‚url existiert nicht‘;
}

lg favorite

Moin,
das hatte ich mal von irgendwo kopiert :smile:

„^(https?|ftp)://([a-z0-9+!*(),;?&=$_.-]+(:[a-z0-9+!*(),;?&=$_.-]+)?@)?[a-z0-9+$_-]+(.[a-z0-9+$_-]+)*(:[0-9]{2,5})?(/([a-z0-9+$_-].?)+)*/?(?[a-z+&$_.-][a-z0-9;:@/&%=+$_.-]*)?(#[a-z_.-][a-z0-9+$_.-]*)?$“

Gruss
Joey

Hallo, der Code ist hier zu finden:

http://stackoverflow.com/questions/3425165/regular-e…

Ich habe ihn bereits gestern probiert, erhalte aber immer die Fehlermeldung „Warning: preg_match() [function.preg-match]: No ending delimiter ‚^‘ found in“. Lösen konnte ich das Problem nicht.

Hältst du diese Methode für sinvoller als eine Prüfung per preg_match()? Sie funktioniert jedenfalls. Gestern habe ich bereits folgendes probiert:

$url = parse\_url($url);
$host = $url['host'];
if (!($ip = gethostbyname($host))) {
 //Fehler
}
// Quelle: PHP 5 & MySQL 5 (Markt + Technik)

Scheint vom Prinzip ähnlich zu sein, geklappt hat es allerdings nicht.

Notice: Undefined index: host in...