conflicterende $_GET parameters in adresbalk
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$aantal = 2;
$photos = glob('img/*.jpg');
if (isset($_GET['aantal']))
{
$aantal = (int) $_GET['aantal'];
}
if (!is_int($aantal) || $aantal < 1 || $aantal > count($photos))
{
$aantal = count($photos);
}
for($getal = 1; $getal <= $aantal; $getal++)
{
echo '[ul]';
echo '[li][img src="img/photo' . $getal . '.jpg"][/li]';
echo '[/ul]';
}
?>
$aantal = 2;
$photos = glob('img/*.jpg');
if (isset($_GET['aantal']))
{
$aantal = (int) $_GET['aantal'];
}
if (!is_int($aantal) || $aantal < 1 || $aantal > count($photos))
{
$aantal = count($photos);
}
for($getal = 1; $getal <= $aantal; $getal++)
{
echo '[ul]';
echo '[li][img src="img/photo' . $getal . '.jpg"][/li]';
echo '[/ul]';
}
?>
De code wordt middels een 'include('photos.php');' binnen een divje van de [main][/main] geplaatst.
In de adesbalk staat nu bijvoorbeeld:
localhost/album.php?aantal=5
En als ik in plaats van ?aantal=5 invul ?aantal=14, dan zie je niet 5 foto's, maar 14 foto's netjes geordend.
Nu wil ik mijn webpagina zowel Nederlandstalig als Franstalig hebben. Dus heb ik dit PHP-bestand bedacht.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
$drapeaux = array
(
array
(
'href' => 'album.php?lang=fr',
'content' => '[img src="images_2/fr.png" title="français"]',
'target' => '_self',
'seq' => 1,
),
array
(
'href' => 'album.php?lang=nl',
'content' => '[img src="images_2/nl.png" title="Nederlands"]',
'target' => '_self',
'seq' => 2,
),
);
echo '<ul>';
foreach ($drapeaux as $key => $value)
{
$class = '';
if ($value['href'] == basename($_SERVER['REQUEST_URI']))
{
$class = 'visited';
}
echo '[li][a class="' .$class. '" href="' .$value['href']. '" target="' .$value['target']. '"]' .$value['content']. '[/a][/li]';
}
echo '[/ul]';
?>
$drapeaux = array
(
array
(
'href' => 'album.php?lang=fr',
'content' => '[img src="images_2/fr.png" title="français"]',
'target' => '_self',
'seq' => 1,
),
array
(
'href' => 'album.php?lang=nl',
'content' => '[img src="images_2/nl.png" title="Nederlands"]',
'target' => '_self',
'seq' => 2,
),
);
echo '<ul>';
foreach ($drapeaux as $key => $value)
{
$class = '';
if ($value['href'] == basename($_SERVER['REQUEST_URI']))
{
$class = 'visited';
}
echo '[li][a class="' .$class. '" href="' .$value['href']. '" target="' .$value['target']. '"]' .$value['content']. '[/a][/li]';
}
echo '[/ul]';
?>
Deze code wordt via 'require_once('drapeaux.php');' binnen de header opgeroepen.
Als ik op een vlaggetje klik, dan komt er in de adresbalk bijvoorbeeld te staan:
localhost/album.php?lang=nl
In de adresbalk rechtstreeks of via het andere vlaggetje kan ik er van maken:
localhost/album.php?lang=fr
In de CSS heb ik volledige opacity gegeven aan het actieve vlaggetje en beduidend verminderde opacity aan het vlaggetje dat even niet meedoet.
Ik weet nog niet hoe ik in mijn code ook kan aangeven dat je effectief naar bijvoorbeeld het volgende adres gaat:
localhost/album/fr.php?lang=fr
Een bestand met de naam 'album/fr.php' wordt als ongeldig gezien wegens het slash-teken.
Dus als iemand een tip heeft om de taalparameter ?lang=... ook echt te koppelen aan een anderstalige pagina... ???
Beide $_GET parameters functioneren apart gebruikt zoals verwacht. Maar als ik ze in de adresbalk combineer, worden de vlaggetjes allebei transparant, terwijl de taal-parameter nog wel in de adresbalk staat:
localhost/album.php?lang=fr&aantal=4
of
localhost/album.php?aantal=4&lang=fr
De volgorde maakt dus niet uit. Alleen de parameter voor het aantal foto's blijft correct het gekozen aantal foto's tonen.
Mijn vraag is nu: hoe kan ik de codes zo aanpassen, dat er geen conflict meer tussen de $_GET parameters blijft bestaan? En dat dus ook bij het actieve vlaggetje de transparantie wegblijft.
• Hoe sla je de gekozen taal op?
• Hoe bepaal je de taal als de gebruiker nog niets heeft gekozen?
Probeer in je code een antwoord te formuleren op die drie vragen en je hebt een goed werkend geheel.
Gewijzigd op 25/10/2017 12:19:10 door Marthijn Buijs
Quote:
Een bestand met de naam 'album/fr.php' wordt als ongeldig gezien wegens het slash-teken.
Als je een script "fr.php" hebt in de subdirectory "album" van je webdirectory dan zou dit gewoon moeten werken.
Quote:
Maar als ik ze in de adresbalk combineer, worden de vlaggetjes allebei transparant, terwijl de taal-parameter nog wel in de adresbalk staat:
localhost/album.php?lang=fr&aantal=4
of
localhost/album.php?aantal=4&lang=fr
localhost/album.php?lang=fr&aantal=4
of
localhost/album.php?aantal=4&lang=fr
Ook hier is geen speciale reden dat dit niet zou werken, omdat je in principe niets vreemds doet.
Ik vermoed dat in beide gevallen iets misgaat in code bij het matchen van gegevens. Volg de tips van @Ward om na te gaan waar het schip precies strandt.
Ik denk dat ik $_GET['lang'] moet uitlezen in het bestand album.php:
Code (php)
Er verandert overigens niets in de uitwerking. Bovendien wordt hier wel een variable $taal gedefinieerd, maar vervolgens komt die variable nergens in de code terug. Dus heeft deze toevoeging niet echt veel betekenis.
Bij het aanroepen van de pagina: localhost/album.php wordt de $_GET['lang'] parameter niet in de adresbalk geafficheerd en blijven beide vlaggetjes dus transparant. Pas door toevoeging van ?lang=fr wordt het Franse vlaggetje volledig zichbaar, maar blijf ik nog steeds op dezelfde pagina.
Ik vermoed dat hetgeen ik beoog te bereiken met de webpagina voor PHP-ingewijden in het geheel niet ingewikkeld is. Maar voor een beginner geeft het standaard cursusmateriaal waarin losse PHP-elementen worden gepresenteerd geen handvatten om verder te bouwen. Waarom bestaat er geen boek of handleiding waarin de manier van coderen die hier nodig is aan de hand van voorbeelden duidelijk wordt uitgelegd. Binnen een formulier met een submit-knop lukt het me wel om meertaligheid te krijgen. Maar de $_GET parameter hoort toch ook te werken buiten een formulier om?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
if(isset($_GET['lang'])) {
$taal = $_GET['lang'];
} else {
$taal = 'nl';
}
if(isset($_GET['nomen'])) {
$nomen = $_GET['nomen'];
}
?>
<!DOCTYPE html>
<html lang="<?php echo $taal; ?>-NL">
<head>
<title>Meertaligheid - 02</title>
<meta charset="UTF-8">
</head>
<body>
<div id="container">
<a href="talen.php?lang=nl"><img src="nl.png"></a>
<a href="talen.php?lang=en"><img src="gb.png"></a>
<a href="talen.php?lang=de"><img src="de.png"></a>
<a href="talen.php?lang=fr"><img src="fr.png"></a>
<form action="talen.php" method="GET">
<label for="naam">Vul een willekeurige naam in</label>
<input type="text" name="nomen" id="naam">
<input type="hidden" name="lang" value="<?php echo $taal; ?>">
<input type="submit" name="activeer" value="genereer">
</form>
<?php
if(isset($_GET['activeer'])) {
if (!empty($_GET['nomen'])) {
if($taal == 'nl') {
echo '<h1>Welkom, '.$nomen.' !</h1>';
} elseif ($taal == 'en') {
echo '<h1>Welcome, '.$nomen.' !</h1>';
} elseif ($taal == 'de') {
echo '<h1>Willkommen, '.$nomen.' !</h1>';
} elseif ($taal == 'fr') {
echo '<h1>Bienvenue, '.$nomen.' !</h1>';
}
} else {
if($taal == 'nl') {
echo '<h1>U heeft nog geen naam gekozen</h1>';
} elseif ($taal == 'en') {
echo '<h1>You have not chosen a name yet</h1>';
} elseif ($taal == 'de') {
echo '<h1>Sie haben noch keinen Namen gewählt</h1>';
} elseif ($taal == 'fr') {
echo '<h1>N\'oubliez pas de choisir un prénom</h1>';
}
}
}
?>
</div>
</body>
</html>
if(isset($_GET['lang'])) {
$taal = $_GET['lang'];
} else {
$taal = 'nl';
}
if(isset($_GET['nomen'])) {
$nomen = $_GET['nomen'];
}
?>
<!DOCTYPE html>
<html lang="<?php echo $taal; ?>-NL">
<head>
<title>Meertaligheid - 02</title>
<meta charset="UTF-8">
</head>
<body>
<div id="container">
<a href="talen.php?lang=nl"><img src="nl.png"></a>
<a href="talen.php?lang=en"><img src="gb.png"></a>
<a href="talen.php?lang=de"><img src="de.png"></a>
<a href="talen.php?lang=fr"><img src="fr.png"></a>
<form action="talen.php" method="GET">
<label for="naam">Vul een willekeurige naam in</label>
<input type="text" name="nomen" id="naam">
<input type="hidden" name="lang" value="<?php echo $taal; ?>">
<input type="submit" name="activeer" value="genereer">
</form>
<?php
if(isset($_GET['activeer'])) {
if (!empty($_GET['nomen'])) {
if($taal == 'nl') {
echo '<h1>Welkom, '.$nomen.' !</h1>';
} elseif ($taal == 'en') {
echo '<h1>Welcome, '.$nomen.' !</h1>';
} elseif ($taal == 'de') {
echo '<h1>Willkommen, '.$nomen.' !</h1>';
} elseif ($taal == 'fr') {
echo '<h1>Bienvenue, '.$nomen.' !</h1>';
}
} else {
if($taal == 'nl') {
echo '<h1>U heeft nog geen naam gekozen</h1>';
} elseif ($taal == 'en') {
echo '<h1>You have not chosen a name yet</h1>';
} elseif ($taal == 'de') {
echo '<h1>Sie haben noch keinen Namen gewählt</h1>';
} elseif ($taal == 'fr') {
echo '<h1>N\'oubliez pas de choisir un prénom</h1>';
}
}
}
?>
</div>
</body>
</html>
De vragen die Ward van der Put vanuit didactisch oogpunt aan mij retourneert, leiden bij mij althans niet tot evidente en concrete antwoorden. In het Frans zeggen wij dan: "Je nage et je tourne en rond!" Als complete neofiet zie ik geen enkel aanknopingspunt om in de code verder te komen.
Er blijven nogal wat vragen over:
1 Hoe ga ik effectief naar een anderstalige pagina via ?lang=... ? Is daar op enige plek een begrijpelijke uitleg voor te vinden?
2 Waarom wordt de default-taal niet herkend door de startpagina? Hoe zorg ik trouwens dat bijvoorbeeld het Nederlands effectief de default-taal is?
3 Wat is er nodig om de onverzoenbaarheid tussen ?lang=... en ?aantal=... te doen ophouden?
Voor alle duidelijkheid: ik vraag niet om een compleet uitgetekende code. Maar een aanwijzing als "Gebruik dit of dat PHP-element eens in een apart PHP-bestand met zus of zo naam en laat dan eens zien hoe je dat hebt opgeschreven" kunnen mij misschien een stapje verder helpen?
- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 26/10/2017 14:46:24 door - Ariën -
2. De defaulttaal is een instelling. Het punt is dat je je programma al flink aan het uitbouwen bent terwijl je nog een goede structuur mist. 1 onderdeel van een goede structuur is een config bestand waarin je alle instellingen bewaard. Dit is makkelijk als je later iets wilt wijzigen en veel overzichtelijker.
Code (php)
De volgende logische stap is checken of $_GET['lang'] bestaat en of deze een GELDIGE WAARDE heeft. Zo niet dan schakel je over op $defaultLanguage. Deze check doe je op iedere pagina, inclusief je index pagina en dus ga je deze code niet apart op elke pagina zetten. Je zult hiervoor een functie moeten gaan maken.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
// libraries/LanguageFunctions.php
function getCurrentLanguage($defaultLanguage, $acceptedLanguages)
{
if(isset($_GET['lang']))
{
$lang = strtolower($_GET['lang']);
if(in_array($lang, $acceptedLanguages))
{
// indien de taal in de url een geldige waarde heeft verlaat de functie en geef deze taal terug
return $lang;
}
}
// anders verlaat de functie en geef de defaulttaal terug
return $defaultLanguage;
}
?>
// libraries/LanguageFunctions.php
function getCurrentLanguage($defaultLanguage, $acceptedLanguages)
{
if(isset($_GET['lang']))
{
$lang = strtolower($_GET['lang']);
if(in_array($lang, $acceptedLanguages))
{
// indien de taal in de url een geldige waarde heeft verlaat de functie en geef deze taal terug
return $lang;
}
}
// anders verlaat de functie en geef de defaulttaal terug
return $defaultLanguage;
}
?>
Dan zou ik voor iedere taal een een translation.xx.php aanmaken:
Code (php)
Op iedere landingspagina (bijv. index.php) krijg je nu:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
require_once 'config/config.php';
require_once 'libraries/LanguageFunctions.php';
$language = getCurrentLanguage($config['defaultLanguage'], $config['acceptedLanguages']);
require_once 'config/translation.'.$language.'.php';
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title><?php echo $trans['homepage']['title']; ?></title>
</head>
<body>
...
</body>
</html>
require_once 'config/config.php';
require_once 'libraries/LanguageFunctions.php';
$language = getCurrentLanguage($config['defaultLanguage'], $config['acceptedLanguages']);
require_once 'config/translation.'.$language.'.php';
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title><?php echo $trans['homepage']['title']; ?></title>
</head>
<body>
...
</body>
</html>
Toevoeging op 25/10/2017 23:29:22:
Je mappen structuur:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
|-- [config]
| |
| |-- config.php
| |-- translation.fr.php
| |-- translation.nl.php
|
|-- [libraries]
| |
| |-- LanguageFunctions.php
|
|
|-- index.php
|
|-- about.php
|-- [config]
| |
| |-- config.php
| |-- translation.fr.php
| |-- translation.nl.php
|
|-- [libraries]
| |
| |-- LanguageFunctions.php
|
|
|-- index.php
|
|-- about.php
Punt 3:
>> 3 Wat is er nodig om de onverzoenbaarheid tussen ?lang=... en ?aantal=... te doen ophouden?
Het antwoord is goede structuur en vaste variabelen. Je zult de variabele $language nodig hebben voor ieder URL die je maakt en $aantal ook voor de pagina met de plaatjes.
voorbeeld:
Code (php)
Toevoeging op 25/10/2017 23:51:10:
p.s. Dit alles is nog zeer BASIC, bedoeld om je op weg te helpen. Hopelijk brengt het je op nieuwe ideeën en of meer inzicht. Perfect is het nog niet
Toevoeging op 26/10/2017 00:22:47:
Edit:
Ik denk dat ik vraag 1 ook begrijp: Veranderen van taal zonder dat mijn GET variabelen verloren gaan.
zoiets?
en dan in je html:
Met http_build_query() zal het hele querystring gedeelte opnieuw opgebouwd worden waarin alle oude waardes uit $_GET overgenomen worden behalve de taal. Die wijst naar een andere taal.
een querystring is bijvoorbeeld: lang=nl&aantal=12
Ik denk dat ik vraag 1 ook begrijp: Veranderen van taal zonder dat mijn GET variabelen verloren gaan.
zoiets?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// toevoegen aan LanguageFunctions.php
function getLanguageLinks($acceptedLanguages)
{
$get = $_GET; // kopieer de hele $_GET array
$links = array(); // netjes initialiseren.
foreach ($acceptedLanguages as $lang)
{
$get['lang'] = $lang; // overschrijf het 'lang' element met de taal waar we mee bezig zijn
$links[$lang] = '<a href="'.$_SERVER['PHP_SELF'].'?'.http_build_query($get).'"><img src="/images/vlag_'.$lang.'.png"></a>';
}
// geef een array met links voor elke taal terug
return $links;
}
?>
// toevoegen aan LanguageFunctions.php
function getLanguageLinks($acceptedLanguages)
{
$get = $_GET; // kopieer de hele $_GET array
$links = array(); // netjes initialiseren.
foreach ($acceptedLanguages as $lang)
{
$get['lang'] = $lang; // overschrijf het 'lang' element met de taal waar we mee bezig zijn
$links[$lang] = '<a href="'.$_SERVER['PHP_SELF'].'?'.http_build_query($get).'"><img src="/images/vlag_'.$lang.'.png"></a>';
}
// geef een array met links voor elke taal terug
return $links;
}
?>
en dan in je html:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
Met http_build_query() zal het hele querystring gedeelte opnieuw opgebouwd worden waarin alle oude waardes uit $_GET overgenomen worden behalve de taal. Die wijst naar een andere taal.
een querystring is bijvoorbeeld: lang=nl&aantal=12
Gewijzigd op 26/10/2017 14:05:59 door Frank Nietbelangrijk
Code (php)
Let op: met == vergelijk je twee waarden, met = ken je een waarde aan een variabele toe. Bovenstaande snippet levert dus altijd 'nl' op als waarde van $taal, ongeacht wat in $_GET['lang'] staat.
EDIT: Dit had je in zekere zin al zelf vast kunnen stellen als je hierna $taal had weergegeven op je scherm. Dan had je meteen gezien dat $_GET['lang'] niet altijd correct wordt overgenomen.
Daarnaast is het inderdaad handig om een soort van whitelisting te gebruiken. Oftewel, je stelt een lijst van toegestane waarden -in dit geval talen- op, en je kijkt of $_GET['lang'] een geldige waarde bevat en anders schakel je terug naar een (geldige) default.
Ook is het handig om een soort van taal-mapping te hebben (of wellicht zou je kunnen denken aan afzonderlijke templates of HTML-snippets per taal) zodat je niet voor elk taalspecifiek stuk tekst een if-elseif-elseif-else statement hoeft te introduceren.
Sidenote aan @Frank: zorg dat je in je HTML je entiteiten escaped --> & in plaats van & in je hyperlinks. Makkelijkste manier is meestal om de hele URL te escapen middels htmlspecialchars(), waarbij je querystringparameterwaarden eigenlijk ook zou moeten urlencoden.
Sidenote #2: het is handiger om eerst je meta-tag in je head te zetten, en dan pas je title-tag, omdat laatstgenoemde UTF-8 kan bevatten. Beter is wellicht nog om in de plaats hiervan, of hiernaast, een header mee te sturen met de gebruikte character encoding.
Gewijzigd op 26/10/2017 13:59:39 door Thomas van den Heuvel
Sidenote #1: Ik heb hier mijn twijfels of ik jou goed begrijp? Zou je misschien een voorbeeldje kunnen oplepelen?
Sidenote #2: Hier heb je helemaal gelijk, een gevalletje van copy & paste. Ik pas dat even aan in bovenstaande post(s).
Dus goed:
Beter:
(plus als je XML of derivaat gebruikt is het nog steeds verplicht :p)
Vergelijk escaping met het dragen van een autogordel. Jij mag dan misschien geen ongelukken maken in het verkeer, maar dat wil niet zeggen dat het verkeer daarmee veilig(er) is (of wordt). Ook wil je niet elke keer de afweging maken. Gebruik gewoon altijd een autogordel.
Plus, het is gewoon een goede gewoonte om output te escapen. Het probleem wanneer je een gevalsonderscheid gaat maken (wat escape ik wel, wat escape ik niet) is dat hier tijd in gaat zitten en het soms niet duidelijk is of het bewust niet wordt gedaan of dat het per ongeluk vergeten is. Het is gewoon veel makkelijker om alles consequent te escapen. Eigenlijk zou dit dus altijd moeten gebeuren met *alle* dynamische output (ook al komen deze dynamische delen uit een taalbestand - het is gewoon vele malen simpeler om alle output hetzelfde te behandelen), tenzij je een expliciete reden hebt om niet te escapen, bijvoorbeeld omdat je HTML-snippets invoegt ofzo (maar dan is je aanpak wellicht niet echt handig).
meer
nog meer
etc.
Volgens mij gebruik je & alleen als onderdeel van een string en niet als scheidingsteken van parameters?
EDIT: mogelijke uitzondering: hyperlinks in javascript, maar: andere context, andere spelregels :p
Gewijzigd op 26/10/2017 15:04:53 door Thomas van den Heuvel
Dus het wordt zoiets als:
Voornaamste winst wanneer je deze vorm gebruikt is ondubbelzinnigheid: de informatie kan maar op één manier geïnterpreteerd worden.
EDIT: maar als je gewoon een functie hebt voor het opbouwen van de link en een functie hebt voor het escapen van output in een HTML-context wordt dit zoiets simpels als:
Code (php)
Wat je overal zonder na te denken kunt gebruiken, en het maakt het geheel nog veiliger ook :p.
Gewijzigd op 26/10/2017 15:18:17 door Thomas van den Heuvel
Heren ik maak hier even een nieuw topic voor aan.
Het is ons duidelijk waar de "candy" parameter ophoudt en de volgende parameter (color) begint omdat iedereen wel M&M's kent. Voor een machine ligt dat wellicht anders :p.
Mogelijk kan bovenstaande URL als volgt geinterpreteerd worden:
candy, met waarde "M"
M, zonder waarde
color, met waarde "yellow"
Want blijkbaar is het toegestaan om geen waarde op te geven.
Je voorkomt al deze ellende door uit te sluiten dat meerdere interpretaties mogelijk zijn d.m.v. (context specifieke) escaping. De eerdergenoemde autogordel.
EDIT: testje: test.php
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
header('Content-Type: text/html; charset=UTF-8');
function dump($a) {
echo '<pre>'.htmlspecialchars(print_r($a, true), ENT_QUOTES, 'UTF-8').'</pre>';
}
dump($_GET);
?>
header('Content-Type: text/html; charset=UTF-8');
function dump($a) {
echo '<pre>'.htmlspecialchars(print_r($a, true), ENT_QUOTES, 'UTF-8').'</pre>';
}
dump($_GET);
?>
Aanroepen met test.php?candy=M&M&color=yellow (in Chrome) levert:
QED :D
test.php?candy=M%26M&color=yellow levert:
POST en GET bevatten altijd urlencoded data en $_GET en $_POST worden altijd ge-url-decode. $_SERVER['REQUEST_URI'] daarentegen bevat bijvoorbeeld weer de rauwe URL. Dit soort nuances kunnen voor veel hoofdpijn zorgen :p.
Gewijzigd op 26/10/2017 15:44:10 door Thomas van den Heuvel
Misschien kun je M&M's ook maar gewoon beter opeten ;-)
Maar in dat geval kun je ook enkel de data (M&M) escapen en dan werkt het gewoon.
Vanaf dat Ozzie PHP op een terechte interventie van Thomas van den Heuvel is komen reageren, heb ik de indruk dat mijn oorspronkelijke vraagstelling enigszins ondersneeuwd raakt. Frank Nietbelangrijk stelt al voor om een nieuw topic aan te maken. Ergo: revenons à nos moutons, messieurs!
@Frank Nietbelangrijk: Ik moet u bedanken voor de uitgebreide aandacht die u geeft aan mijn vraag. In alle eerlijkheid moet ik echter bekennen dat - ik ben nog maar neofiet in het domein - veel PHP-elementen in uw uiteenzetting voor mij onbekend zijn. Al lezende komt bij mij de vraag op: zou ik niet bij u in de leer mogen om grip te krijgen op wat bijvoorbeeld een mappenstructuur is? Want dat ben ik nog niet in mijn traject tegengekomen. Nogmaals: ik begrijp maar zeer beperkt wat u opschrijft, maar ik krijg wel de indruk dat u prima in staat bent om stap-voor-stap uit te leggen hoe een bepaald PHP-probleem te benaderen.
Ik heb al eens gezocht naar een club of interessegroep voor webdevelopment waar leden elkaar kunnen helpen. Maar in de regio waar ik woon (Eindhoven c.a.) heb ik die nog niet gevonden. Indien iemand een idee heeft, aarzel niet om mij op de hoogte te brengen. Merci.
Een mappenstructuur heeft niet zo zeer met PHP te maken maar meer daar waar ik mijn bestanden ga bewaren. Net als een gemiddelde computergebruiker zijn foto's in een andere map zal willen bewaren dan zijn muziek zeg maar.
dus begin aldaar uw index.php pagina opgeslagen is met het aanmaken van twee nieuwe mappen: libraries en config.
Een cursus moet toch ergens te volgen zijn? Ik heb al eens eerder iemand een aantal dagen begeleid en zou dat best kunnen maar eindhoven dat is toch wel een stukje uit de buurt...
naar boven (klik mij!) scrollt haal ik daar een passage aan van code die je eerder geplaatst hebt waar je mogelijk iets mee kunt :).
Hoi @Theo, sorry dat een en ander is ondergesneeuwd maar als je een stukje Gewijzigd op 27/10/2017 17:46:07 door Thomas van den Heuvel