Rare Tekens
Ik heb een contactformulier. Als iemand daar aparte tekens (als ë etc) gebruikt, worden deze raar weergegeven, zoals:
Ik woon in België, maar mijn land wordt niet goed gespeld!
Nu gebruik ik dit:
'.nl2br(stripslashes(utf8_encode(htmlspecialchars($_POST['bericht'])))).'
Maar het is nog steeds niet opgelost. Iemand een idee?
Code (php)
1
2
3
4
2
3
4
<?php
$bericht1 = $_POST['bericht'];
$totaalbericht = nl2br(stripslashes(utf8_encode(htmlspecialchars($bericht1))))
?>
$bericht1 = $_POST['bericht'];
$totaalbericht = nl2br(stripslashes(utf8_encode(htmlspecialchars($bericht1))))
?>
tevens is de opbouw van de code volgens mij niet goed en zou het er als volgt uit kunnen zien, zelf vindt ik dat dit het overzichtelijker maakt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
// omzetten naar string
$bericht1 = $_POST['bericht'];
// nl2br functie
$bericht2 = nl2br($bericht1);
// stripslashes, al betwijfel ik of deze van toepassing is
$bericht3 = stripslashes($bericht2);
// utf8 encode
$bericht4 = utf8_encode($bericht3);
//htmlspecialchars
$bericht5 = htmlspecialchars($bericht4);
// in deze string zou dan je output zitten
$bericht5
?>
// omzetten naar string
$bericht1 = $_POST['bericht'];
// nl2br functie
$bericht2 = nl2br($bericht1);
// stripslashes, al betwijfel ik of deze van toepassing is
$bericht3 = stripslashes($bericht2);
// utf8 encode
$bericht4 = utf8_encode($bericht3);
//htmlspecialchars
$bericht5 = htmlspecialchars($bericht4);
// in deze string zou dan je output zitten
$bericht5
?>
ben je overigens aan de eind van de regel geen puntkomma vergeten -> ;
Gewijzigd op 15/06/2010 18:17:42 door Bas IJzelendoorn
Dutch Guy: Mooie duidelijke uitleg, ik zit zelf ook steeds te klooien met dit probleem. Mischien handig om hier een korte tut van te maken?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
// omzetten naar string
$bericht = $_POST['bericht'];
// nl2br functie
$bericht = nl2br($bericht1);
// stripslashes, al betwijfel ik of deze van toepassing is
$bericht = stripslashes($bericht2);
// utf8 encode
$bericht = utf8_encode($bericht3);
//htmlspecialchars
$bericht = htmlspecialchars($bericht4);
// in deze string zou dan je output zitten
$bericht
?>
// omzetten naar string
$bericht = $_POST['bericht'];
// nl2br functie
$bericht = nl2br($bericht1);
// stripslashes, al betwijfel ik of deze van toepassing is
$bericht = stripslashes($bericht2);
// utf8 encode
$bericht = utf8_encode($bericht3);
//htmlspecialchars
$bericht = htmlspecialchars($bericht4);
// in deze string zou dan je output zitten
$bericht
?>
waarom zoveel vars aanmaken?
Als je dat doet wat Olie koning doet, wel ook de var namen veranderen binnen de de haakjes dat is hij vergeten :P.
Als je bovendien met MySQL werkt, moet je zorgen dat overal de collatie ook op UTF8 staat. Zie voor meer info:
http://www.shawnolson.net/a/946/unicode-data-with-php-5-and-mysql-41.html
Of:
http://www.stumbleupon.com/group/php/forum/37465/
Gewijzigd op 15/06/2010 21:58:27 door Jan Koehoorn
UTF8 is inderdaad de meest gangbare oplossing. Als toelichting op Milo S en Olie Koning. De strings welke ik heb gebruikt met een nummer eraan te geven heb ik een uitleg proberen te geven wat de input en output is bij de functie. 1 string gebruiken kan natuurlijk ook gewoon.
http://developer.loftdigital.com/blog/php-utf-8-cheatsheet
Gewijzigd op 16/06/2010 12:09:50 door Arjan -
Dit heb ik al in mijn HTML.. Maar ik heb nog steeds de oplossing nie t:S
Indien ze in de database worden opgeslagen, controleer dan eens of deze rare tekens ook in de database voorkomen.
Dan zal je ook je gehele database op UTF-8 moeten zetten inclusief de verbinding.
Als ik na het invoeren van het formulier $bericht echo krijg ik hetzelfde, dus het gaat al verkeerd bij het invoeren.
Header, database-instellingen etc zijn wel goed.
En wat als je utf8_decode() doet?
nl2br, stripslashes (zeg alsjeblieft gewoon magic quotes uit!) en htmlentities gebruikt?
En komt de tekst uit een database? Dan moet je de MySQL tabel én verbinding (SET NAMES) op UTF-8 zetten. Ga je mailen, vergeet dan niet om ook hier een header in mee te geven!
Wat als je nou alleen En komt de tekst uit een database? Dan moet je de MySQL tabel én verbinding (SET NAMES) op UTF-8 zetten. Ga je mailen, vergeet dan niet om ook hier een header in mee te geven!
Gewijzigd op 29/06/2010 09:39:24 door Chris -
Code (php)
1
2
3
4
2
3
4
$bericht1 = $_POST['bericht'];
$bericht1 = utf8_decode($bericht1);
$bericht1 = utf8_encode($bericht1);
$bericht1 = nl2br($bericht1);
$bericht1 = utf8_decode($bericht1);
$bericht1 = utf8_encode($bericht1);
$bericht1 = nl2br($bericht1);
De tekst komt uit een formulier, en gaat vervolgens in de database (die op utf8 staat op database, tabel en veld-niveau).
htmlentities gaf geen verandering
Htmlentities gebruik je pas als je de tekst in de html zet, niet als je het gaat opslaan in e database. Bij UTF8 gebruik je het als volgt:
Gewijzigd op 29/06/2010 12:41:07 door Piet Verhagen
Piet Verhagen op 29/06/2010 12:38:22:
Wat de ene functie de ene kant op doet, doet de andere functie de andere kant op. Dat haalt tuurlijk geen fluit uit. Je zou ook eens na kunnen denken. Eén van beide functies gebruiken, of ze heel niet gebruiken, niet allebei.
Gek genoeg werkt het bij mij wel. Vraag niet hoe het kan, maar profiteer ervan, zeg ik dan maar.
Als ik htmlentities gebruik bij de weergave, geeft hij alle html-code ook gewoon weer als bv <br />, terwijl ik dat niet wil.
Coclusie: Zoals ik het nu doe is het zonder nadenken, maar wel werkend.
Amateur zal ik nog wel even blijven.
nl2br weg halen. En probeer toch eens om die beide utf8 functies ook ff weg te halen en of het dan werkt. Wat het is gekkigheid zoals je het nu hebt.