Controleer een URL
Als de waarde een url is moet dit een url blijven en anders moet het action=waarde worden
Bijv:
Hoe kan ik dit controleren?
indien het bijv. site/ bevat..dan interne link, anders externe?
Met php en een regular expression.
Eerder zoiets:
Code (php)
1
2
3
4
5
2
3
4
5
if (preg_match('http://', $goto)){
$url = $goto;
} else {
$url = './index.php?action='.$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)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
if (preg_match('http://', $goto) || preg_match('https://', $goto) || preg_match('www', $goto)) {
// URL
}else{
// Lokale URL
}
?>
if (preg_match('http://', $goto) || preg_match('https://', $goto) || preg_match('www', $goto)) {
// URL
}else{
// Lokale URL
}
?>
of de regex is zoiets als
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
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
if (preg_match('/https?:\/\//', $goto)) {
$url = $goto;
}
else {
$url = './index.php?action='.$goto;
}
?>
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:// :
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).
Code (php)
1
2
3
4
5
6
7
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;
}
$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 :)
Als je actions alleen uit letters bestaan kun je toch gewoon
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
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
}
?>
$url = "home" ;
if(preg_match("/^[a-zA-Z]$/" , $url))
{
//action
}
else
{
//url
}
?>
Of denk ik nu te simpel :)?