UTF-8 probleem
Als ik in een PHP pagina "plain" de tekst "wéér" neer zet, gaat dit goed.
Als ik dit uit een database laad, krijg ik "wéér".
Ik gebruik de regel
Als ik die weg haal werkt het wel goed, maar het bestand dat het systeem dan naar een website upload geeft dan weer vraagtekens i.p.v. "é".
Als ik die regel wel gebruik is het bestand dat naar die website geupload wordt wel goed, maar is de pagina op mijn server weer met "é".
Ik hoop dat iemand begrijpt wat ik bedoel.
Alvast bedankt,
Gewijzigd op 15/02/2012 16:37:26 door Afhaal Chinees
htmlentities om de letters te escapen? Heb je die wel in de juiste charset?
Je gebruikt hopelijk wel iets als * Voeg toe in PHP:
Dit doe je vooraleer je html naar de gebruiker stuurt.
In principe dus net voor
<!DOCTYPE ... >
<html
* Voeg toe in HTML, ergens in <head>:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
* maak je MySQL database en tabellen aan met Collation: utf8_unicode_ci
Ik denk dat dit het meest belangrijke is. Er zijn nog extra maatregelen die je kunt nemen (in je formulier, in je mySQL queries, ...).
Probeer eens uit
Gewijzigd op 15/02/2012 19:45:40 door Kris Peeters
Code (php)
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
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
<?php
// @see http://www.phphulp.nl/php/forum/topic/utf8-probleem/82712/
/*
CREATE DATABASE phphulp DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS gastenboek (
id int(11) NOT NULL AUTO_INCREMENT,
message text COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
*/
// maar dan uiteraard met je eigen gegevens
$con = mysql_connect('localhost', 'root', '');
mysql_select_db('phphulp', $con);
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['message'])) {
mysql_query(
"INSERT INTO gastenboek (message) VALUES ('" . mysql_real_escape_string($_POST['message']) . "');" // bij het inserten enkel escapen
);
}
header('location: ?');
}
$res = mysql_query("SELECT message FROM gastenboek");
$items = '';
while($row = mysql_fetch_assoc($res)) {
$items .= '<p>' . htmlentities($row['message'], ENT_QUOTES, "UTF-8") . '</p>'; // htmlentities enkel bij SELECT
}
header("Content-Type: text/html; charset=UTF-8");
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>UTF-8 voorbeeld</title>
</head>
<body>
<form action="" method="post">
<div><textarea name="message"></textarea></div>
<div><input type="submit" value="GO!"/></div>
</form>
<div id="messages">' . $items . '</div>
</body>
</html>';
?>
// @see http://www.phphulp.nl/php/forum/topic/utf8-probleem/82712/
/*
CREATE DATABASE phphulp DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS gastenboek (
id int(11) NOT NULL AUTO_INCREMENT,
message text COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
*/
// maar dan uiteraard met je eigen gegevens
$con = mysql_connect('localhost', 'root', '');
mysql_select_db('phphulp', $con);
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['message'])) {
mysql_query(
"INSERT INTO gastenboek (message) VALUES ('" . mysql_real_escape_string($_POST['message']) . "');" // bij het inserten enkel escapen
);
}
header('location: ?');
}
$res = mysql_query("SELECT message FROM gastenboek");
$items = '';
while($row = mysql_fetch_assoc($res)) {
$items .= '<p>' . htmlentities($row['message'], ENT_QUOTES, "UTF-8") . '</p>'; // htmlentities enkel bij SELECT
}
header("Content-Type: text/html; charset=UTF-8");
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>UTF-8 voorbeeld</title>
</head>
<body>
<form action="" method="post">
<div><textarea name="message"></textarea></div>
<div><input type="submit" value="GO!"/></div>
</form>
<div id="messages">' . $items . '</div>
</body>
</html>';
?>
Vergeet even dat dit niet deugt als gastenboek; ik heb enkel het hoogstnoodzakelijke gepost.
Bij mij gebeurt er wat ik verwacht.
Gewijzigd op 16/02/2012 00:49:46 door Kris Peeters
Is dit geen Javascript?
Ik heb het gisteren zelf uitgetest; het euro-teken wordt juist weergegeven bij mij.
Test eens mijn volledige code.
(database die je speciaal gebruikt om te testen, test-mapje, ... los van waar je nu mee bezig bent)
Misschien passeer je je data twee keer door htmlentities of zo.
Gewijzigd op 16/02/2012 12:10:40 door Kris Peeters
Het zou kunnen dat ik per ongeluk twee keer htmlentities heb, maar zou je dan op z'n minst niet iets moeten zien in plaats van lege plekken?