Überprüfen ob richtige url

Hey,

Bei meinem Formular möchte ich gerne überprüfen op die angegeben URL "richtig" ist und kein Fake, jedoch weiss ich nicht sorecht wie ich das anstellen soll.

Momentar regle ich es so:

PHP:
if($book['page']=='http://'|| $book['page'] == '')
{
  if($book['page']=='http://'){ $hp = ""; }
  if($book['page']==''){ $hp = ""; }
}
else 
{
  $hp = "(<a href=\"$book[page]\" target=\"_blank\">www</a>)";
}

und Standart-Wert im Formular bei 'page' ist dann halt "http://", aber diese Versioun ist sicher nicht sicher weil wenn man dann einfach "keine seite eingibt" wird es ja trotzdem wieder verlinkt.

Habt ihr ne Lösung ?

LG Saskia
 
Du möchtest nun folgendes prüfen:
Hompage angegeben -> wenn ja = URL prüfen; wenn nein = keine Homepage eintragen

Oder habe ich da nun etwas falsch verstanden?

Die URL würde ich mit regulären Ausdrücken prüfen.
 
PHP:
if(!preg_match('/(([\w]+:)?//)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?/', $book['page'])) {
   echo "Die Homepage-URL kann nicht korrekt sein.";
}
 
²SnEaKy: ja genau so hab ich das gemeint :)

²saftmeister: danke aber das funktioniert nich richtig :/ & könntest du mir dass vll erklären was der genau macht ? weil versteh davon garnix mit diesen ganzen Zeichen und alles.

nun jetzt kommt ne Fehlermeldung:
Warning: Unknown modifier '/' in /srv/www/htdocs/web25/html/lavinia/gb_eintragen.php on line 29

Warning: Unknown modifier '/' in /srv/www/htdocs/web25/html/lavinia/gb_eintragen.php on line 32

zeilen 29 - 37:
PHP:
if($book['page'] == '' || !preg_match('/(([\w]+:)?//)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?/', $book['page']))
{
  if($book['page']==''){ $hp = ""; }
  if(!preg_match('/(([\w]+:)?//)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?/', $book['page'])) { $hp = ""; }
}
else 
{
  $hp = "(<a href=\"$book[page]\" target=\"_blank\">www</a>)";
}

was ist da falsch ?
 
Sorry, war mein Fehler, ich hab den regulären Ausdruck nur aus der regexlib kopiert. Zu finden hier: http://www.regexlib.com

Veränder ihn mal so:

PHP:
if(preg_match('§(([\w]+:)?//)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?§', $book['page'])) 
{
  $hp = "(<a href=\"$book[page]\" target=\"_blank\">www</a>)"; 
}

Ich habe deine if-Bedingung auf das Notwendigste zusammen gekürzt. Die andern Bedingungen erscheinen mir unsinnig.
 
Danke, jetzt klappt es :)

Und mit den If-Bedingungen, stimmt ja die sind ja wircklich unsinnig weil wenn das Feld ja leer ist, ist es ja keine richtige URL... überlegen hilft wircklich manchmal (;
 
Beschränke das Ganze lieber nur auf URL mit http- und https-Schema. Die derzeitige Prüfung lässt nämlich noch jegliches URI-Schema zu, auch Pseudo-Schemen wie javascript, die für Cross-Site Scripting ausgenutzt werden können. Daher sollte das Maskieren der HTML-Metazeichen auch nicht vergessen werden.

Mein Vorschlag:
Code:
(?:https?://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*))*)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*))?)?)
 
Hi,

und noch einer:

PHP:
function is_url($url)
{

    $url_pattern = '/^https?:\/\/                                      
                     (?:                                              
                      (?:                                              
                       [a-z][a-z0-9]{1,63}                            
                         |                                            
                       [a-z0-9.-]+\.[a-z][a-z0-9]{1,63}                
                      )                                                
                      \.[a-z]{2,4}                                    
                        |                                              
                      [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}  
                     )                                                
                    (?![a-z0-9_.-])                                    
                   /ix';                                              
    return  preg_match($url_pattern, $url);
}
 
Zurück