Controleer een URL

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

G P

G P

01/05/2012 19:57:35
Quote Anchor link
Ik heb een database met navigaties
Als de waarde een url is moet dit een url blijven en anders moet het action=waarde worden

Bijv:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$url = 'http://www.facebook.com';
$navigatie = $url;


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$url = 'home';
$navigatie = 'index.php?action='.$url;


Hoe kan ik dit controleren?
 
PHP hulp

PHP hulp

28/03/2024 19:42:18
 
Wim E

Wim E

01/05/2012 20:15:22
Quote Anchor link
htaccess?
indien het bijv. site/ bevat..dan interne link, anders externe?
 
Henk PHP

Henk PHP

01/05/2012 20:17:03
Quote Anchor link
Met php en een regular expression.
 
G P

G P

01/05/2012 21:59:56
Quote Anchor link
Niet met .htaccess
Eerder zoiets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
if (preg_match('http://', $goto)){
    $url = $goto;
} else {
    $url = './index.php?action='.$goto;
}


Het probleem is dat er ook https:// of zelfs alleen www kan bestaan.
Ik heb het volgende geprobeerd (Dit duurd eeuwen als er veel linken zijn):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
    $handle = @fopen($goto, 'r');
    if ($handle !== false){
        $url= $goto;
    } else {
        $url = './index.php?action='.$goto;
    }
 
Joakim Broden

Joakim Broden

01/05/2012 22:25:19
Quote Anchor link
Ik ben niet goed met regular expressions maar je kunt bv dit doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
    if (preg_match('http://', $goto) || preg_match('https://', $goto) || preg_match('www', $goto)) {
        // URL
    }else{
        // Lokale URL
    }
?>


of de regex is zoiets als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    if (preg_match('^(http|https|www)', $goto)) {
?>

maar daar moet je maar even mee spelen want zoals ik al zei ben ik niet goed met regex :-)
Gewijzigd op 01/05/2012 22:29:31 door Joakim Broden
 
Wouter J

Wouter J

01/05/2012 22:43:51
Quote Anchor link
Ik zou dan in het geval van Hertog dit gebruiken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if (preg_match('/https?:\/\//', $goto)) {
    $url = $goto;
}

else {
    $url = './index.php?action='.$goto;
}

?>


Maar je hebt nog veel meer mogelijkheden dan alleen http:// of https:// :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
http://phphulp.nl
https://phphulp.nl
phphulp.nl
www.phphulp.nl
open.phphulp.nl
...


Ik zou je beperken tot aan de http(s):// url's, het wordt een ramp om alles goed te matchen (en dan krijg je zoiets).
 
G P

G P

01/05/2012 23:03:14
Quote Anchor link
Ik heb nu het volgende: (Dit werkt goed zolang ik met http(s):// werk in mijn URL's)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
    if (filter_var($goto, FILTER_VALIDATE_URL) !== false){
        $url = $goto;
    } elseif (!$goto) {
        $url = './';
    } else {
        $url = 'index.php?action='.$goto;
    }

Bedankt voor jullie reacties, ik zal wel verder zoeken tot ik het vind... of tot jullie met een goede oplossing komen :)
 
Jacco Engel

Jacco Engel

02/05/2012 09:08:56
Quote Anchor link
Tijd voor een ander point of view :
Als je actions alleen uit letters bestaan kun je toch gewoon

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

$url
= "home" ;
if(preg_match("/^[a-zA-Z]$/" , $url))
{

    //action
}
else
{
    //url
}

?>


Of denk ik nu te simpel :)?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.