Ik heb een probleem op een wordpress site van mij, vreemd genoeg heb ik op een vrijwel identieke website dit probleem niet.
Wanneer ik een rij met url's heb en ik bezoek die pagina dan stoppen de url's na dat in de url het teken ' voorkomt. Op de andere website loopt de url netjes door en werkt hij gewoon.
Het is niet echt gebruikelijk een ' in een url te gebruiken, dit moet je ook niet willen.
Misschien kan je beter naar een oplossing zoeken om de ' er uit te filteren dan om hem wel te kunnen gebruiken.
Ik kan de ' wel vervangen met %27 en dan geeft hij hem weer en kom ik ook op de externe pagina terecht. Het zin url's welke ik krijg aangelerd via een affiliate partij. Er zit dus tracking in naar mij.
Om eerlijk te zijn weet ik geen andere oplossing dan %27 te gebruiken.
Binnen een url heeft het totaal geen zin om waarden in aanhalingstekens te wrappen
bv. ...&reurl='pagina.html'
De redenering die je moet maken is de volgende:
In de url zijn er vier actieve karakters waar je op moet letten: ? = & #
(Maar ook andere tekens kunnen gevolgen hebben)
Tussen die karakters door heb je dus de key en de values die de $_GET-variabelen bemannen.
Je moet uiteraard vermijden dat 1 van de vier (bovengenoemde) karakters zelf voorkomen in een value.
bv. stel, je wil categorie 'sport&cultuur'
Je snapt dat de url die & zal zien als een teken om aan de volgende variabele te beginnen.
index.php?categorie=sport&cultuur
komt overeen met
$_GET['categorie'] = 'sport';
en
$_GET['cultuur'] = '';
Om dus toch een speciaal teken in de value te zetten, haal je de waarde door urlencode() .
Bekijk dit klein voorbeeld als illustratie.
<?php
$url = 'index.php?categorie=' . urlencode('sport&cultuur');
echo '<a href="' . $url . '">klik</a><br>';
if (!empty($_GET['categorie'])) {
echo '$_GET["categorie"] geeft de waarde: ' . $_GET['categorie'];
}
?>
Die urlencode versie van het karakter kan je in de url-balk zien. De waarde is echter zomaar beschikbaar als $_GET-variabele.
Eventueel kan je urldecode($_GET['categorie']) nodig om de waarde terug te hebben.