Moderator |
|
Van PHP.net:Citaat: If the input string contains an invalid code unit sequence within the given encoding an empty string will be returned, unless either the ENT_IGNORE or ENT_SUBSTITUTE flags are set.
Oftewel: je invoer bevat ongeldige UTF-8 (is geen UTF-8).
Dit komt (onder andere) omdat je document niet expliciet de UTF-8 character-encoding gebruikt en deze ook niet gedeclareerd is in je HTML-document. Je browser valt dan waarschijnlijk terug op een default (bijvoorbeeld "Western" oftewel ISO-8859-1).
Je kunt expliciet een character encoding instellen via:
- een PHP header
- een meta tag
Tevens zou je je form-tag kunnen voorzien van een accept-charset property.
Daarnaast kun je misschien beter htmlspecialchars() gebruiken in plaats van htmlentities().
Verder zouden de waarden van properties van html-tags te allen tijde tussen dubbele quotes moeten staan.
En tot slot zou je, als je uitsluitend UTF-8 gebruikt als character encoding, je documenten ook op moeten slaan met UTF-8 encoding. Ook dit is vrij belangrijk. De meeste PHP-editors bieden ondersteuning voor deze mogelijkheid.
Bonus: vertrouw nooit user input, en druk deze ook nooit zomaar af. Hier kan bijvoorbeeld javascript in zitten die je cookie-informatie doorstuurt naar een externe website.
Een werkende variant wordt bijvoorbeeld:
<?php
header('Content-Type: text/html; charset=UTF-8');
?>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form action="testform.php" method="post" name="frmtoevoegen" accept-charset="UTF-8">
<table><tr><td>veld1</td><td><input type="text" name="veld1" value="qdsfsqdf" /></td></tr>
<tr><td>veld2</td><td><input type="text" name="veld2" value="ee" /></td></tr>
<tr><td colspan="2" align="center">
<!--<input type="button" value="terug" onclick="window.location='zoekformulier.php';">-->
</td></tr></table>
<input type="submit" value="verwerk" id="verwerk" name="verwerk" />
</form>
<?php
if (isset($_POST['verwerk'])):
foreach ($_POST as $kolom => $waarde):
if ($kolom == 'verwerk') continue;
echo $kolom.': '.htmlspecialchars($waarde, ENT_QUOTES, 'UTF-8').'<br />';
endforeach;
endif;
?></body>
</html>
<?php header('Content-Type: text/html; charset=UTF-8'); ?> <!DOCTYPE html> <html> <head> <title></title> </head> <body> <form action="testform.php" method="post" name="frmtoevoegen" accept-charset="UTF-8"> <table><tr><td>veld1</td><td><input type="text" name="veld1" value="qdsfsqdf" /></td></tr> <tr><td>veld2</td><td><input type="text" name="veld2" value="ee" /></td></tr> <tr><td colspan="2" align="center"> <!--<input type="button" value="terug" onclick="window.location='zoekformulier.php';">--> </td></tr></table> <input type="submit" value="verwerk" id="verwerk" name="verwerk" /> </form> <?php if (isset($_POST['verwerk'])): foreach ($_POST as $kolom => $waarde): if ($kolom == 'verwerk') continue; endforeach; endif; ?></body> </html>
EDIT: en in PHP is het meestal handiger om zoveel mogelijk single quotes te gebruiken.
EDIT 2: wanneer je deze informatie opslaat in je database, zorg er dan ook voor dat dit in de juiste character encoding gebeurt! Hierbij is het niet genoeg dat je tabellen als utf8 gedeclareerd zijn (in MySQL). Als je een verbinding maakt met je database moet je je te gebruiken character encoding instellen met de daarvoor bestemde _set_charset() functie anders wordt je UTF-8 invoer gezien als latin1 en wordt deze nog een keer geencodeerd naar UTF-8, met alle ongewenste gevolgen van dien. |