Gå til innhold

[Løst] Http:// kontrollfunksjon


Anbefalte innlegg

Hei.

 

jeg har en side der man har to felt, ene er navn og andre feltet skal det inn en URL adresse, hvis ikke der står http:// før selve adressen så fungerer ikke linken/får feilmelding, er der en kontrollfunksjon i PHP som sjekker om det ble lagt inn i feltet, og hvis ikke man finner det så blir det lagt på plass automatisk?

 

hvis jeg formulerer litt feil slik dere ikke forstår så skal jeg prøve på forklare det på en annen måte.

 

takk for svar. :D

Lenke til kommentar
Videoannonse
Annonse

Har ikke så mye PHP under mitt belte, men dette er vell et problem som javascript kan løse. Går ut ifra at det er snakk om input fra bruker, lag et script som tar i mot data som har blitt lagt inn og sjekker om http:// er lagt til forran. Med dette kan du enten returnere til bruker at http:// må legges inn eller at scriptet gjør det selv.

Lenke til kommentar

Det er ikke nødvendig å bruke JavaScript til dette da PHP har en funksjon, parse_url, som kan brukes i nettopp slike situasjoner. Her er løsningen på problemet ditt, hentet fra denne nettsiden:

 

if ( $ret = parse_url($url) ) {
  if ( !isset($ret["scheme"]) )
    {
      $url = "http://{$url}";
    }
}

Prøv å gi denne funksjonen et bogus scheme og den vil allikevel godta det som et scheme.

Måten jeg kanskje ville gjort det på var å sjekke om scheme var et kjent scheme, og om det er det så er går url gjennom valideringen. Noe sånt kanskje?

<?php
$url = "http://www.google.com";
if(Check_URL_Scheme($url) !== false) {
	echo "<strong>" . $url . "</strong> har en ordning/protokoll som er gjenkjent og blir derfor behandlet som gyldig.";
} else {
	echo "<strong>" . $url . "</strong> har ikke en gjenkjennbar ordning/protokoll og blir derfor behandlet som ugyldig";
}

function Check_URL_Scheme($url) {
	// Hvis parsing er vellykket
	if ($ret = parse_url($url)) {
		// Hvis det finnes noe under scheme
		if (isset($ret['scheme'])) {
			// Switch som sammenligner med kjente ordninger/protokoller
			// Om ordningen er en av casene som er satt opp så er den gjenkjent
		 	switch ($ret['scheme']) {
		 		case 'https':
		 		case 'http':
		 		case 'ftp':
		 			return true;
		 		default:
		 			return false;
		 	}
		} else {
			return false;
		}
	}
}

Edit: Fjernet breaks i switch statement da de aldri blir nådd.

Endret av JanTerjeRiisOttoJohansen
Lenke til kommentar

Break'ene i den switchen er unødvendig, de blir aldri nådd, og det kan gjøres enklere med fall through

switch ($ret['scheme']) {
    case 'https':
    case 'http':
    case 'ftp':
        return true;

    default:
        return false;
}

Hei! Det har du absolutt helt rett i! Endret svaret mitt, takk!

Endret av JanTerjeRiisOttoJohansen
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...