extract en htmlentities
Ik kan me herinneren dat je de extract functie kon combineren met htmlentities of htmlspecialchars. Dat stond dacht ik ergens tussen de reacties bij een tutorial, maar kon het niet meer terugvinden.
Maar goed, punt is dat het erop lijkt dat het niet werkt:
extract(htmlentities($_POST)) geeft logischerwijze een foutmelding, omdat de invoer voor htmlentities dan geen string is maar een array.
htmlentities(extract($_POST)) geeft daarentegen geen foutmelding en zou ook moeten werken, maar vooralsnog lijkt het tegen te sputteren: het blijkt nog steeds mogelijk werkende javascript code of html in te voeren.
Alleen als ik de geextracteerde (als dat een woord is tenminste) variabelen handmatig omzet naar de bijbehorende htmlentiteiten werkt het, maar dan gaat het nut van extract() weer verloren.
De vraag dus: hoe kan ik htmlentities en extract in één keer combineren, zodat ik veilige en bruikbare variabelen haal uit een via POST verzonden formulier?
Maar goed, punt is dat het erop lijkt dat het niet werkt:
extract(htmlentities($_POST)) geeft logischerwijze een foutmelding, omdat de invoer voor htmlentities dan geen string is maar een array.
htmlentities(extract($_POST)) geeft daarentegen geen foutmelding en zou ook moeten werken, maar vooralsnog lijkt het tegen te sputteren: het blijkt nog steeds mogelijk werkende javascript code of html in te voeren.
Alleen als ik de geextracteerde (als dat een woord is tenminste) variabelen handmatig omzet naar de bijbehorende htmlentiteiten werkt het, maar dan gaat het nut van extract() weer verloren.
De vraag dus: hoe kan ik htmlentities en extract in één keer combineren, zodat ik veilige en bruikbare variabelen haal uit een via POST verzonden formulier?
Gesponsorde koppelingen:
iets omslagtiger werken ;-)
$var = extract($_POST);
htmlentities($var);
$var = extract($_POST);
htmlentities($var);
Nee, dat werkt niet. Logisch ook, omdat je uit extract() meerdere variabelen haalt die je nu zou toewijzen aan één variabele.
Daarnaast is wat jij doet hetzelfde als wat ik had, htmlentities(extract($_POST)) :)
Daarnaast is wat jij doet hetzelfde als wat ik had, htmlentities(extract($_POST)) :)
$_POST = htmlentities($_POST);
extract($_POST);
zal dan ook wel niet werken? of wel
extract($_POST);
zal dan ook wel niet werken? of wel
Nee, htmlentities accepteert alleen een string als input. $_POST is een array, dus dat conflicteert.
dan een foreach, en daarna weer met een implode aan elkaar plakken, of zeg ik nu weet iets doms
Lees de discussie die loopt tussen de Wes en de rest over het gebruik ervan.
http://www.phphulp.nl/php/tutorials/4/366/
Jelmer geeft overigens een duidelijk reactie erbij:
En dat htmlentities(extract($_POST)) werkt betwijfel ik sterk. Extract geeft namelijk een integer (aantal goed geïmporteerde waarden) terug als return-waarde. Die wordt dus door htmlentities getrokken. Niet de variabelen.
Verder wijs ik je door naar:
http://nl3.php.net/extract
http://www.phphulp.nl/php/tutorials/4/366/
Jelmer geeft overigens een duidelijk reactie erbij:
En dat htmlentities(extract($_POST)) werkt betwijfel ik sterk. Extract geeft namelijk een integer (aantal goed geïmporteerde waarden) terug als return-waarde. Die wordt dus door htmlentities getrokken. Niet de variabelen.
Verder wijs ik je door naar:
http://nl3.php.net/extract
Dat was inderdaad de tutorial waarnaar ik op zoek was, bedankt Kalle :)
En Jelmer heeft gelijk. Dat verklaart ook meteen waarom je een getal ziet als je echo extract($_POST) doet. Had het zelf nog niet gezien, maar bedankt voor de verheldering :)
En Jelmer heeft gelijk. Dat verklaart ook meteen waarom je een getal ziet als je echo extract($_POST) doet. Had het zelf nog niet gezien, maar bedankt voor de verheldering :)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
function post_entities(&$array){
foreach($array as $k => $v){
if(is_array($v)){
post_entities($v);
}else{
$array[$k] = htmlentities($array[$k]);
}
}
}
?>
function post_entities(&$array){
foreach($array as $k => $v){
if(is_array($v)){
post_entities($v);
}else{
$array[$k] = htmlentities($array[$k]);
}
}
}
?>
aanroepen met:
Ik heb het niet getest
Gewijzigd op 01/01/1970 01:00:00 door Bo az
foreach($array as $k => $v){
ik snap deze niet helemaal wat is de waarde van $k en $v ?
ik snap deze niet helemaal wat is de waarde van $k en $v ?
Bedankt! Het werkt :)
Edit:
$k = key
$v = value
Bijvoorbeeld $_POST['adres'], heeft als key 'adres' en als value de waarde, bv. 'phphulpweg 12'.
Edit:
$k = key
$v = value
Bijvoorbeeld $_POST['adres'], heeft als key 'adres' en als value de waarde, bv. 'phphulpweg 12'.
Gewijzigd op 01/01/1970 01:00:00 door Kasper Isgek



