login  Naam:   Wachtwoord: 
Registreer je!
 Forum

probleem met htmlentities bij uitvoer formulier (Opgelost)

Offline Jorisvh - 29/12/2014 15:56 (laatste wijziging 29/12/2014 15:56)
Avatar van JorisvhLid Geachte als ik deze code uitvoer en ik voer een é in een veld dan krijg ik niets als uitvoer. Zie 2de waarde.
Hoe komt dit en wat kan ik er aan doen.
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title></title>
  5. </head>
  6. <body>
  7. <form action='testform.php' method='post' name='frmtoevoegen'>
  8. <table><tr><td>veld1</td><td><input type='text' name='veld1' value='qdsfsqdf' /></td></tr>
  9. <tr><td>veld2</td><td><input type='text' name='veld2' value='ee' /></td></tr>
  10. <tr><td colspan="2" align="center">
  11. <!--<input type='button' value='terug' onClick="window.location='zoekformulier.php'">-->
  12. </td></tr></table>
  13. <input type="submit" value='verwerk' id='verwerk' name='verwerk'>
  14. </form>
  15. <?
  16. if(isset($_POST["verwerk"])):
  17. foreach($_POST as $kolom => $waarde):
  18.  
  19. if($kolom=="verwerk") continue;
  20.  
  21. echo $kolom.": ".$waarde." ".htmlentities($waarde, ENT_QUOTES, "UTF-8")."</br>";
  22. endforeach;
  23.  
  24. endif;
  25.  
  26. ?>
  27.  
  28. </body>
  29. </html>

3 antwoorden

Gesponsorde links
Offline Thomas - 29/12/2014 16:40 (laatste wijziging 29/12/2014 16:50)
Avatar van Thomas 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:
  1. <?php
  2. header('Content-Type: text/html; charset=UTF-8');
  3. ?>
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <title></title>
  8. </head>
  9. <body>
  10. <form action="testform.php" method="post" name="frmtoevoegen" accept-charset="UTF-8">
  11. <table><tr><td>veld1</td><td><input type="text" name="veld1" value="qdsfsqdf" /></td></tr>
  12. <tr><td>veld2</td><td><input type="text" name="veld2" value="ee" /></td></tr>
  13. <tr><td colspan="2" align="center">
  14. <!--<input type="button" value="terug" onclick="window.location='zoekformulier.php';">-->
  15. </td></tr></table>
  16. <input type="submit" value="verwerk" id="verwerk" name="verwerk" />
  17. </form>
  18. <?php
  19. if (isset($_POST['verwerk'])):
  20. foreach ($_POST as $kolom => $waarde):
  21. if ($kolom == 'verwerk') continue;
  22. echo $kolom.': '.htmlspecialchars($waarde, ENT_QUOTES, 'UTF-8').'<br />';
  23. endforeach;
  24. endif;
  25. ?></body>
  26. </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.
Bedankt door: Wijnand
Offline Jorisvh - 05/01/2015 19:24
Avatar van Jorisvh Lid Ik heb mijn code aangepast en heb dit gedaan:

<?php
header('Content-Type: text/html; charset=UTF-8');
<form action="testform.php" method="post" name="frmtoevoegen" accept-charset="UTF-8">
?>

En het leek hiermee al te werken!

Offline Thomas - 06/01/2015 11:59
Avatar van Thomas Moderator De bovenstaande "oplossing" legt niets uit en voegt niets toe aan het daarvoor gegeven antwoord.

Nog veel belangrijker dan het antwoord is vaak de redenering in de oplossing die de oorzaak van het probleem blootlegt en wegneemt. Dat lijkt mij een betere oplossingsstrategie dan het aanroepen van een toverspreuk die ervoor zorgt dat het werkt, zonder dat je precies weet (of lijkt te weten) waarom "het werkt".

Een goed antwoord zou je inzicht moeten geven, anders ontstijgt deze niet het niveau van een ordinaire apentruuk.

Het bovenstaande antwoord is dan ook totaal ongeschikt als oplossing, ondanks het feit dat dit waarschijnlijk de juiste oplossing is.

Ook is het nogal vreemd dat je punten krijgt voor het beantwoorden van je eigen vragen...
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.199s