Ik probeer een tekst ($_SERVER['REQUEST_URI']) te verdelen in substrings.
De tekst wordt gesplitst op []. Een array dus. Echter tussen de haken kan een andere waarde staan. Hoe haal ik deze er uit.
Mijn poging
$match='/\[\]/';
preg_match($match, $kv[0], $m);
Ik verwachte dat in $m de 3 delen zouden staan maar toch niet.
Ook /\[*\]/ lukt niet
[ en ] zijn overigens unsafe characters in URL's. Uit RFC 1738:
Other characters are unsafe because gateways and other transport agents are known to sometimes modify such characters. These characters are "{", "}", "|", "\", "^", "~", "[", "]", and "`".
Welke "3 delen" verwacht je precies bij het genoemde voorbeeld (en is dat letterlijk "$_SERVER['REQUEST_URI']", of dat wat er _in_ die variabele zit)?
Alvast 2 schoten voor de boeg:
<?php
$str = '$_SERVER[\'REQUEST_URI\']';
//splitsen op "[" en "]"
print_r(preg_split('/[\\[\\]]/',$str)); /*
Array
(
[0] => $_SERVER
[1] => 'REQUEST_URI'
[2] => //lege string
)
*/
//matchen op "het deel voor de 1e blokhaak" en "het deel tussen de blokhaken (en accolades)"
preg_match('/^(.*)\\[\'(.*)\'\\]$/',$str,$match);
print_r($match); /*
Array
(
[0] => $_SERVER['REQUEST_URI'] //full match
[1] => $_SERVER //deel voor de blokhaak
[2] => REQUEST_URI //deel tussen de blokhaken
)
*/
?>
Ah, met Ward z'n opmerking snap ik (mogelijk) waar je heen wilt: /foo[bar]/x[y]/ opsplitsen in foo, bar, x,y (???) Kortom: doe even een voorbeeld met 1) wat heb je als input, en 2) wat wil je als resultaat.
Ik start met
urldecode($_SERVER['REQUEST_URI'])
hier krijg ik bijvoorbeeld: /schaak/sc_post-gent/?page[]=kruistabel0&page[2]=kruistabel1&page[]=kruistabel2
dan splits ik de uri op / om de verschillende onderdelen te hebben
deel 1= map (vast deel), deel 2=club (opgezocht in database) deel 3 extra map of paramters.
indien map deel 4 zijn paramters
Onderzoek de parameters:
splitsen op ? en &
Elke splitsing moet uit 2 delen bestaan. zijnde voor en achter = anders negeren
Het voorste deel kan onderdeel zijn van een array maar is niet altijd zo. page zijn de verschillende pagina's welke getoond moeten worden. trn zijn de verschillende toernooien (niet in voorbeeld).
indien array moet ik ook dat weten welk element hoewel het zelden voorkomt.
Jan
uitkomst van voorbeeld na ? zou moeten zijn:
page, leeg, kruistabel
page, 2, kruistabel1
page, leeg, kruistabel2
Index 1 is nu je variabele naam. Als index 2 is gevuld weet je dat het om een array notatie gaat, waarbij dan de evt. array key in index 3 staat. In index 4 staat in alle gevallen je waarde.
?
Onbekende gebruiker
26-09-2021 14:15
gewijzigd op 26-09-2021 14:18
Gaat dat niet automatisch via $_GET?
En waarom maak je geen gebruik van parse_url() ?
Ik ben al heel ver dankzij Robs hulp. Dank!
Ik wordt echter nu gewaar dat deze splitsing bepaande delen verwijderd.
uri info: nextround.php?r[]=30&g[]=_591-604_594-597_589-610
verwijderd alles na het koppelteken. Waarom? hoe los ik dat nu op?
Ad Fundum op 26/09/2021 14:15:14
Gaat dat niet automatisch via $_GET?
En waarom maak je geen gebruik van parse_url() ?
omdat ik dat niet ken(de) :)
Jan
[size=xsmall]Toevoeging op 26/09/2021 14:42:39:[/size]
ps1: Ik splits nu om verder te kunnen op 'a' ipv '-'
ps2: ook geprobeerd met ~, + en een paar andere tekens. De gegevens verdwijnen eveneens.
De regex ging nu tot de eerste "word break" ("\\b"). Een "-" is ook een "word break". Volgens mij werkt het zo beter (tot de volgende ampersand, of einde regel):