Choose your s t y l e : t e k s t< / p>
  ;& nbsp ;& nbsp ; IAAS l o o k< / a>
  ;& nbsp ;& nbsp ; IAAS l o o k I I< / a> < / p> < / div>
De keuze van de gebruiker wordt bijgehouden in een cookie (StyleSwitcher.php). $ s e t = $ GET [ ’ s e t ’ ] ; $ s e t = preg replace ( ’ # [ ˆ a−zA−Z0−9 −]# ’ , ’ ’ , $ s e t ) ; setcookie ( ’ s i t e s t y l e ’ , $set , time ( ) + 3 1 5 3 6 0 0 0 ) ; header ( ’ L o c a t i o n : ’ . $ SERVER [ ’HTTP REFERER ’ ] . ’ ’ ) ;
Deze cookie wordt gelezen in het head-gedeelte van de HTML-code. Indien hij niet is ingesteld wordt iaasRenewed.css genomen als opmaakbestand.
Voorgaande code is gebaseerd op Asmussen (2005).
4.3.4
Modularisering
Elke link binnen de website neemt de vorm ‘BASE URLindex.php?p=module’ aan. ‘p’ is een voorbeeld van een GET-variabele. index.php bepaalt aan de hand hiervan welke 23
HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE module ingevoegd moet worden. i f ( i s s e t ( $ GET [ ’ p ’ ] ) ) { $p = $ GET [ ’ p ’ ] ; / / u r l } e l s e i f ( i s s e t ( $ POST [ ’ p ’ ] ) ) { / / form $p = $ POST [ ’ p ’ ] ; } else { $p = NULL ; }
Met behulp van een switch wordt bepaald welke pagina en paginatitel getoond moeten worden. switch ( $p ) { case ’ about ’ : $page = ’ about . i n c . php ’ ; $ p a g e t i t l e = ’ About IAAS ’ ; break ; case ’ r e g i s t r a t i o n ’ : $page = ’ r e g i s t r a t i o n . i n c . php ’ ; $ p a g e t i t l e = ’ R e g i s t r a t i o n Pages ’ ; break ; ... default : $page = ’ main . i n c . php ’ ; $ p a g e t i t l e = ’Home Page o f t h e I n t e r n a t i o n a l A s s o c i a t i o n o f Students i n A g r i c u l t u r a l and Related Sciences ’ ; break ; }
Instellen van een defaultpagina is belangrijk om te vermijden dat url’s zoals index.php?p=link/naar/een/gevaarlijk/script.php uitgevoerd kunnen worden, bij zulke pogingen wordt dan gewoon main.inc.php ingevoegd. Een extra beveiliging bestaat erin na te gaan of de opgegeven module effectief bestaat, als niet dit zo is, wordt main.inc.php ingevoegd. i f ( ! f i l e e x i s t s ( ’ . / modules / ’ . $page ) ) { $page = ’ main . i n c . php ’ ; $ p a g e t i t l e = ’Home Page o f t h e I n t e r n a t i o n a l A s s o c i a t i o n o f Students i n A g r i c u l t u r a l and Related Sciences ’ ; }
Als de module rechtstreeks opgevraagd wordt, moet de gebruiker doorverwezen worden naar de hoofdpagina. Dit kan bijvoorbeeld door na te gaan of de constante BASE URL gedefinieerd is of niet, aangezien deze enkel in config.inc.php gedefinieerd wordt. Na deze code volgt dan de inhoud van de webpagina, ofwel nog een switch, die dan werkt met een andere GET-variabele. 24
HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE i f ( ! defined ( ’ BASE URL ’ ) ) { r e q u i r e o n c e ( ’ . . / i n c l u d e s / c o n f i g . i n c . php ’ ) ; $ u r l = BASE URL . ’ i n d e x . php ’ ; header ( ” L o c a t i o n : $ u r l ” ) ; exit ; } T i t e l< / h1>
Meerdere GET-variabelen Bepaalde karakters hebben een speciale betekenis in HTML en/of XHTML en moeten daarom gecodeerd worden voorgesteld indien de letterlijke betekenis gevraagd is. Dit geldt bijvoorbeeld voor het ‘<’-teken in HTML en XHTML, dat het begin van een tag aanduidt. Om ‘<’ te schrijven in de betekenis van ‘is kleiner dan’ moet dan ‘<’ gebruikt worden. ‘<’ wordt een ‘entity reference’ genoemd (Raggett et al., 1999a). Veel browsers laten incorrect gebruik van ampersands toe, ze vervangen ze namelijk door een letterlijke ampersand indien de hele code niet op een ‘entity reference’ lijkt. In XHTML kan dit echter niet meer (W3C, 2002). In PHP worden ampersands gebruikt bij het scheiden van GET-variabelen in een url, en bij sessies. Om een XHTML-document correct te laten valideren moeten al deze ampersands gecodeerd worden in de XHTML-code met behulp van ‘&’, en het karakter dat PHP gebruikt om argumenten te scheiden moet veranderd worden. Dit kan via het aanpassen van het bestand php.ini, door de PHP-instellingen te wijzigen in een .htaccess-bestand of door in een PHP-bestand zelf bepaalde code mee te geven (Dorward, 2005). Een andere mogelijkheid is om meteen het karakter te veranderen naar bijvoorbeeld een puntkomma, die niet gecodeerd moet worden. Dit werd bij deze thesis gebruikt. De instellingen werden veranderd via een .htaccess bestand: php value a r g s e p a r a t o r . o u t p u t ” ; ” php value a r g s e p a r a t o r . i n p u t ” ; ” IfModule >
4.4
Meertaligheid
Om de website te kunnen aanbieden in verschillende talen werd gebruik gemaakt van een aangepaste versie van SiteTranslator, een collectie PHP-klassen (Eberhardt, 2004). Om ook ondersteuning te bieden voor talen die niet met het Romeinse schrift geschreven worden, werd gekozen voor UTF-8. 25
HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE
4.4.1
Unicode - UTF-8
Een computer werkt enkel met enen en nullen. Om karakters voor te stellen moet daarom aan elk karakter een bitsequentie toegekend worden. Hiervoor bestaan verschillende manieren, vaak afhankelijk van de karakterset (Latijns schrift, Cyrillisch schrift, enzovoort). Aangezien de website moet werken met zoveel mogelijk verschillende schriften werd gekozen voor Unicode. De Unicode-standaard is ontworpen om aan om het even welk karakter een uniek ´ (Latin capital letter a with nummer toe te kennen. Zo komt bijvoorbeeld het karakter ‘A’ grave) overeen met de code 00C0 (The Unicode Consortium, 2006). Dit karakter, of deze code, moet dan nog worden omgezet naar een bitsequentie. Hiervoor bestaan ´ daarvan is 8-bit Unicode Transformation Format verschillende codeersystemen. Een ´ twee, drie of vier bytes per teken. Zo wordt geen ruimte (UTF-8). UTF-8 bevat e´ en, ´ verspild bij korte tekens, zoals de letters van het Latijnse alfabet. Ter illustratie: ‘A’ wordt in UTF-8 weergegeven door C3 80, ofwel 11000011 10000000. De volgende paragrafen zijn voor een deel gebaseerd op Round (2007) en WACT Development Team (2007). HTML/XHTML en UTF-8 Om een document correct te laten weergeven in een webbrowser, moet de codering altijd gedeclareerd worden. Een eerste manier is het meegeven van de informatie over de karakterset in de HTTP-header. Als een bezoeker de pagina opvraagt (HTTP-request) dan zal in de HTTP-response de juiste karakterset van de opgevraagde pagina getoond worden. In PHP wordt dit bekomen door de volgende code op te nemen:4 header ( ’ Content−Type : t e x t / h t m l ; c h a r s e t =UTF−8 ’ ) ;
Daarnaast kan de karaktersetspecificatie in het document zelf opgenomen worden via een meta-tag, die best zo hoog mogelijk in de head-tag geplaatst wordt. <meta h t t p −e q u i v = ” Content−t y p e ” content= ” t e x t / h t m l ; c h a r s e t =UTF−8” /> < t i t l e>IAAS< / t i t l e> < / head>
In XHTML-documenten moet boven de DOCTYPE-declaratie een Extensible Markup Language (XML)-declaratie opgenomen zijn:
of binnen PHP: echo ’ ’ ;
Als alle methodes toegepast worden, zijn de prioriteitsregels als volgt (Ishida, 2007): 1. HTTP Content-Type 2. XML-declaratie 4
Dit moet bovenaan in de code komen maar wel na eventuele code die session start() aanroept
26
HOOFDSTUK 4. WEBSITE: IMPLEMENTATIE 3. declaratie in de meta-tag Met het attribuut ‘accept-charset’ van de form-tag wordt aangeduid welke codering aanvaard wordt door de server die het formulier moet verwerken. Als dit attribuut weggelaten wordt, wordt de standaardwaarde ”unknown” ingevuld. Browsers kunnen deze waarde interpreteren als de waarde die gebruikt werd bij het doorsturen van het bestand dat het formulier bevat (Raggett et al., 1999b). Met de volgende regel wordt ingevulde informatie zeker in UTF-8-codering verstuurd: