HTMLEntities
Hallo allemaal,
Ik ben bezig met een klein CMS systeem. Nu lukt het afhandelen van de HTML me niet. Deze kan worden aangepast met TinyMCE. Vervolgens pas ik hier de htmlentities functie op toe. Tot hier gaat het goed. Als ik het nu bij het ophalen met html_entity_decode weer decode gaat het inprincipe goed. Ik maak echter gebruik van ajax, en jquery/javascript gaat er niet goed mee om. Deze laat het zien als text (dus ook de html tags). Hierbij maakt het niet uit of ik de decode functie wel of niet gebruik.
Weet iemand hoe ik dit kan oplossen?
Alvast bedankt
Ik ben bezig met een klein CMS systeem. Nu lukt het afhandelen van de HTML me niet. Deze kan worden aangepast met TinyMCE. Vervolgens pas ik hier de htmlentities functie op toe. Tot hier gaat het goed. Als ik het nu bij het ophalen met html_entity_decode weer decode gaat het inprincipe goed. Ik maak echter gebruik van ajax, en jquery/javascript gaat er niet goed mee om. Deze laat het zien als text (dus ook de html tags). Hierbij maakt het niet uit of ik de decode functie wel of niet gebruik.
Weet iemand hoe ik dit kan oplossen?
Alvast bedankt
Sla je invoer gewoon rauw op.
htmlentities met vervolgens de omgekeerde bewerking is nogal loos niet?
Mogelijke complicatie hierbij is dat je niet overal consequent dezelfde character encoding gebruikt. Functies zoals htmlentities werken alleen correct als je (overal) de juiste (en liefst één) character encoding hanteert en je bronmateriaal ook in deze character encoding is opgeslagen.
Is er een speciale reden waarom je overal htmlentities overheen wilt gooien?
"Een klein CMS" klinkt ook een beetje paradoxaal :s.
htmlentities met vervolgens de omgekeerde bewerking is nogal loos niet?
Mogelijke complicatie hierbij is dat je niet overal consequent dezelfde character encoding gebruikt. Functies zoals htmlentities werken alleen correct als je (overal) de juiste (en liefst één) character encoding hanteert en je bronmateriaal ook in deze character encoding is opgeslagen.
Is er een speciale reden waarom je overal htmlentities overheen wilt gooien?
"Een klein CMS" klinkt ook een beetje paradoxaal :s.
Als ik het rauw wil opslaan krijg ik de volgende error:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'text-decoration: line-through;">Als je op een van de pijltjes op het dashboard d' at line 2
Dat komt denk ik door de ", hierdoor word waarschijnlijk in PHP de query afgesloten en dat veroorzaakt de error (denk ik).
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'text-decoration: line-through;">Als je op een van de pijltjes op het dashboard d' at line 2
Dat komt denk ik door de ", hierdoor word waarschijnlijk in PHP de query afgesloten en dat veroorzaakt de error (denk ik).
Beveiliging in de query mist waarschijnlijk.
Alles omzetten naar UTF-8 / utf8_unicode_ci
1) Je HTML document:
2) je mysql tabellen: Collatie: utf8_unicode_ci
3) je mysql connectie:
1) Je HTML document:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<html>
<head>
<meta charset="UTF-8">
<title>TODO supply a title</title>
</head>
<body>
<div>TODO write content</div>
</body>
</html>
<head>
<meta charset="UTF-8">
<title>TODO supply a title</title>
</head>
<body>
<div>TODO write content</div>
</body>
</html>
2) je mysql tabellen: Collatie: utf8_unicode_ci
3) je mysql connectie:
En daarbij moet je dus de DATA-delen in je query escapen met een _real_escape_string() functie. Daarnaast zul je mogelijk ook invoer moeten filteren want het gebruik van _real_escape_string() alleen is soms niet genoeg.
@frank nietbelangrijk
1) ik heb nu dit <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
2) Is ingesteld
3) $this->mysqli->set_charset('utf8');
Dit helpt allemaal niet, blijf hetzelfde probleem hebben
@Thomas van den Heuvel
$verhaal = $this->connection->real_escape_string($verhaal); Heb dit toegevoegd, helpt niet.
1) ik heb nu dit <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
2) Is ingesteld
3) $this->mysqli->set_charset('utf8');
Dit helpt allemaal niet, blijf hetzelfde probleem hebben
@Thomas van den Heuvel
$verhaal = $this->connection->real_escape_string($verhaal); Heb dit toegevoegd, helpt niet.
Quote:
Dan zit daar waarschijnlijk de fout.Ik maak echter gebruik van ajax, en jquery/javascript gaat er niet goed mee om. Deze laat het zien als text (dus ook de html tags). Hierbij maakt het niet uit of ik de decode functie wel of niet gebruik.
Kun je relevante code posten waarmee je informatie ophaalt / afdrukt via jQuery?
EDIT: en post ook je uiteindelijke INSERT / UPDATE query.
Gewijzigd op 05/03/2015 23:41:38 door Thomas van den Heuvel
Jquery code voor het weergeven is de volgende (value.verhaal komt uit de ajax request)
Ophalen data uit database (ajax request)
Opslaan in de database van text
EDIT: Probleem opgelost. Bij het opslaan htmlentities() gebruiken, en dan ophalen en met de onderstaande code decoden in de javascript
Ophalen data uit database (ajax request)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$query = 'SELECT v.id, v.naam, v.verhaal, lv.lokaal, lv.kaart
FROM opendag_vakken as v
JOIN opendag_leerweg_has_vakken as lv
ON v.id = lv.vakken_id
WHERE v.id = "' . $vak . '"';
$this->connection->SetError('Ophalen van vak info mislukt!');
$load = $this->connection->load($query);
$load['data'][0]['verhaal'] = html_entity_decode($load['data'][0]['verhaal']);
json_encode($load);
?>
$query = 'SELECT v.id, v.naam, v.verhaal, lv.lokaal, lv.kaart
FROM opendag_vakken as v
JOIN opendag_leerweg_has_vakken as lv
ON v.id = lv.vakken_id
WHERE v.id = "' . $vak . '"';
$this->connection->SetError('Ophalen van vak info mislukt!');
$load = $this->connection->load($query);
$load['data'][0]['verhaal'] = html_entity_decode($load['data'][0]['verhaal']);
json_encode($load);
?>
Opslaan in de database van text
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$verhaal = $this->connection->real_escape_string($verhaal);
// update verhaal
$query = 'UPDATE opendag_vakken
SET verhaal = "' . $verhaal . '"
WHERE id = ' . $vak . ' ';
$this->connection->SetError('Opslaan van verhaal mislukt!');
$load = $this->connection->save($query);
return $load;
?>
$verhaal = $this->connection->real_escape_string($verhaal);
// update verhaal
$query = 'UPDATE opendag_vakken
SET verhaal = "' . $verhaal . '"
WHERE id = ' . $vak . ' ';
$this->connection->SetError('Opslaan van verhaal mislukt!');
$load = $this->connection->save($query);
return $load;
?>
EDIT: Probleem opgelost. Bij het opslaan htmlentities() gebruiken, en dan ophalen en met de onderstaande code decoden in de javascript
Gewijzigd op 06/03/2015 10:45:39 door Matthijs Vos
Het netto effect van htmlentities() bij opslaan en html_entity_decode() bij het ophalen en voor het doorsturen is 0,0. Daarnaast hoef je volgens mij geen speciale bewerkingen te doen op een JSON-entry die HTML bevat, getuige de volgende test:
index.htm
test.php
index.htm
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
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
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
</head>
<body>
<div id="test"></div>
<script type="text/javascript">
//<![CDATA[
$().ready(function() {
$.ajax({
'type': 'GET',
'url': 'test.php',
'dataType': 'json',
'success': function(data) {
console.log(data);
if (data.status == 'success') {
$('#test').html(data.html);
} else {
$('#test').html('<p>failed to load content</p>');
}
}
});
});
//]]>
</script>
</body>
</html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
</head>
<body>
<div id="test"></div>
<script type="text/javascript">
//<![CDATA[
$().ready(function() {
$.ajax({
'type': 'GET',
'url': 'test.php',
'dataType': 'json',
'success': function(data) {
console.log(data);
if (data.status == 'success') {
$('#test').html(data.html);
} else {
$('#test').html('<p>failed to load content</p>');
}
}
});
});
//]]>
</script>
</body>
</html>
test.php




