problemen met lettercodering UTF-8

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

03/06/2014 21:39:06
Quote Anchor link
@ Erwin,
Dank je voor je duidelijke reactie.

Klopt het dat als ik dat allemaal heb ingesteld dat ik dan [htmlentities($row[0],ENT_QUOTES,"UTF-8");] kan veranderen in [htmlentities($row[0])] en dat het dan goed zou moeten werken? (zou een mooie test zijn om te weten of ik alles goed heb staan ...)

Zijn de variabelen die ik in phpmyadmin zie:
character set connection: latin1;
character set database: latin1;
nog verder van belang og moet ik die ook op utf-8 zetten? En zo ja hoe kan ik dat doen (als mijn provider het me al toe staat). Met [SET NAMES 'utf8';] verandert er nix nl.



Toevoeging op 03/06/2014 22:12:36:

Ik heb nu de volgende code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
    header('Content-Type: text/html; charset=UTF-8');
//functie om data te controleren en te beschermen tegen hackers
    function test_input($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;        
    }

    session_start();

    $sTITLE='test tekensets';
    $sKOP1='test Tekensets';
    $sKOP2='invoerpagina';
    
    require '_phpscripts/beheer_header.inc.php';    
    
//controleren of formulier verzonden is
    if($_SERVER['REQUEST_METHOD']=='POST') {
        if(isset($_POST['volgende'])) {
            if(!empty($_POST['titel'])){
                $input=test_input($_POST['titel']);
                $errors[]='1: input = '.$input;
                require '_phpscripts/dbverbinding.inc.php';
                if (!mysqli_set_charset($dblink, "utf8")) {
                    $errors[]="Error loading character set utf8: %s\n".mysqli_error($dblink);
                }
else {
                    $errors[]="Current character set: %s\n".mysqli_character_set_name($dblink);
                }
                
                $input=htmlspecialchars_decode($input);
                $input=mysqli_real_escape_string($dblink,$input);
                $errors[]='2: input tbv db = '.$input;    
                $sql="INSERT INTO m_test (titel) VALUES ('".$input."')";
                if(!$res=mysqli_query($dblink, $sql))
                {

                    trigger_error('Fout in query: '.mysqli_error($dblink));
                    $errors[]='boek <strong>'.$input.' NIET</strong> toegevoegd';
                }

                else
                {
                    $errors[]='boek <strong>'.$input.'</strong> toegevoegd';                            
                }

                $sql="SELECT titel FROM m_test ORDER BY id DESC LIMIT 1";
                if(!$res=mysqli_query($dblink, $sql))
                {

                    trigger_error('Fout in query: '.mysqli_error($dblink));
                }

                else
                {
                    $row = mysqli_fetch_array($res);
                    $errors[]='resultaat uit db zonder htmlentities: '.$row[0];
                    $row[1]=htmlentities($row[0],ENT_QUOTES,"UTF-8");
                    $errors[]='resultaat uit db met utf-8: '.$row[1];        
                    $row[2]=htmlentities($row[0]);
                    $errors[]='resultaat uit db zonder utf-8: '.$row[2];                            
                }

                mysqli_close($dblink); #beëindigingen db verbinding                                
                }
        }
    }

?>
    
    <label>formulier</label>
    <form id="form_mega" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST" enctype="multipart/form-data">
        <label for="titel" <?php echo $roodtitel; ?> >invoer speciale characters (bv ):</label>    
        <input id="titel" name="titel" type="text" size="80" value=<?php echo '"'.$input.'"' ?> /><br />
        <div class="submit rechts">
            <input class="submit" type="submit" name="volgende" value="VOLGENDE>>>" />
        </div>
    </form>
<?php
        echo '<br />
        <div style="border:1px solid darkgrey;">
        Aantal meldingen: '
.count($errors).'<br />';
    if (count($errors)!=0){
        echo '
        <ul>'
;
        foreach ($errors as $error){
            echo '
            <li>'
.$error.'</li>';
        }

        echo '
        </ul>'
;
    }

?>

</body>
</html>    

Dit geeft het volgende resultaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<li>resultaat uit db zonder htmlentities: </li>
<li>resultaat uit db met utf-8: &euml;</li>
<li>resultaat uit db zonder utf-8: &Atilde;&laquo;</li>

Behalve eerder genoemde punten in in mysql staan tabellen en kolommen in de database netjes op utf-8. Als ik geen character-set mee geef met htmlentities krijg ik daar vreemde tekens. Klopt dat zo of heb ik nog steeds iets niet goed staan?
Gewijzigd op 03/06/2014 22:14:14 door
 
PHP hulp

PHP hulp

27/11/2024 23:33:05
 
Ivo P

Ivo P

03/06/2014 23:16:10
Quote Anchor link
Waarom wil je zo graag htmlentities gebruiken?

Resultaat 1 is toch wat je nodig hebt?


http://nl1.php.net/htmlentities
Geeft aan dat de derde parameter optioneel is, de characterset, maar dat de defaultwaarde verschilt per php-versie
 
Dos Moonen

Dos Moonen

04/06/2014 07:32:48
Quote Anchor link
Quote:
Klopt het dat als ik dat allemaal heb ingesteld dat ik dan [htmlentities($row[0],ENT_QUOTES,"UTF-8");] kan veranderen in [htmlentities($row[0])] en dat het dan goed zou moeten werken? (zou een mooie test zijn om te weten of ik alles goed heb staan ...)

Nee, htmlentities doet extra spul dat overbodig is als je de charset overal goed ingesteld hebt. Gebruik dus htmlspecialchars($row[0], ENT_QUOTES, "UTF-8")
Als je de documentatie van beiden functies lees staat er dat het heel erg aan te raden is om UTF-8 te specificeren.
 

04/06/2014 21:00:48
Quote Anchor link
@Ivo,
htmlentities lijkt inderdaad niet meer nodig. Ik gebruikte het omdat bij xhtml het anders niet door de validator kwam. bij html5 lijkt het geen probleem.

Maar betekent volgens mij wel, dat er html tag in de database gezet kunnen worden (<script></script>) en dat maakt het heackgevoelig. Of wordt dat elders ondervangen?>
 
Erwin H

Erwin H

04/06/2014 21:10:36
Quote Anchor link
Gebruik dan htmlspecialchars dat maakt alleen de speciale tekens onschadelijk, maar doet niets met alle tekens met accenten en dergelijke.
 

Pagina: « vorige 1 2



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.