Euro teken van HTML UTF-8 naar MySQL UTF-8
Alles werkt prima behalve het gebruik van het Euro teken, deze word in de database vermeld als â zelfs wanneer ik hem eerst langs een string replace laat lopen en deze de € laat vervangen door € gaat het fout, ik heb al verschillende dingen geprobeerd maar ik krijg het euro teken gewoon niet werkend.
Heeft iemand enig idee waar het fout gaat of hoe ik dit kan omzeilen.
Zowel de HTML als MySQL staan ingesteld op UTF-8 (Unicode) en heb zelfs nog dubbel utf8_decode over de string gegooid.
Tevens haalt het niks uit als ik alle controle weghaal want ook het direct posten van de string heeft niet het gewenste resultaat.
Wanneer ik via PHPmyAdmin het € teken er direct inzet wordt deze wel correct weggeschreven en uitgelezen door de pagina.
moet je nemen volgens mij....
Heb ik daar genomen, gezien ik vaak werk vanuit Putty en Linux zelf UTF-8 is leek me dit de beste keuze gezien het een aantal probleempjes bij directe HTML input toen al voor me weg nam.
Echter loop ik nu dus tegen dit probleem aan
Je zet het in de database met een gewone €, pas als je de data output zet je het om naar euro; door de functie htmlentities. Behalve als je HTML in je database hebt, bijvoorbeeld als je een WYSIWYG-editor (TinyMCE, FCKEditor) gebruikt.
Naja dan zet ik hem er maar als "smiley" in zie geen andere mogelijkheid :).
Heb hier zelf eigenlijk nog nooit over nagedacht.
Zie ook dit script (welliswaar PostgreSQL, maar dat maakt hier niet uit) waar de database en de html-pagina's met utf-8 werken en waar een € gewoon zo wordt ingevoerd, opgeslagen en weergegeven. Daar vindt geen enkele conversie plaats, is nergens voor nodig. Zie ook de broncode in het voorbeeld.
€ posten werkt
€ posten werkt niet
beide werken wanneer ze direct in de database worden gepland met PHPmyAdmin
Code (php)
1
2
3
4
2
3
4
<?php $postMessage = str_replace('€', ':euro:', $_POST['message']);
$postMessage = htmlentities($postMessage);
$gbook_sql = mysql_query("INSERT INTO guestbook
VALUES ('', '".mysql_real_escape_string($postName)."', '".date('Y-m-d H-i-s')."', '".mysql_real_escape_string($postMail)."', '".mysql_real_escape_string(htmlentities($_POST['site']))."', '".mysql_real_escape_string($postMessage)."', '".$_SERVER['REMOTE_ADDR']."')"); ?>
$postMessage = htmlentities($postMessage);
$gbook_sql = mysql_query("INSERT INTO guestbook
VALUES ('', '".mysql_real_escape_string($postName)."', '".date('Y-m-d H-i-s')."', '".mysql_real_escape_string($postMail)."', '".mysql_real_escape_string(htmlentities($_POST['site']))."', '".mysql_real_escape_string($postMessage)."', '".$_SERVER['REMOTE_ADDR']."')"); ?>
Dat is alles wat er met de $_POST['message']; wordt gedaan en zelfs wanneer ik € omzet naar :euro: voor hij naar de database gaat zet hij nog  in de Database en kapt hij ook gelijk het bericht af, na dat euro teken (ofja &arcirc; teken) schrijft hij ook niks meer van dat bericht de database in.
@PostGRE_Frank: in Theorie moet het ook gewoon kunnen maar in de Praktijk gaat er toch echt iets mis. Ik had het ook graag anders gezien maar dat is het dus niet.
Gewijzigd op 01/01/1970 01:00:00 door JunkieXP
JunkieXP schreef op 04.03.2008 12:26:
Er gaat iets mis omdat jij ergens iets fout doet. Zoals je in mijn voorbeeld kunt zien, gebruik ik overal utf8 en doe ik helemaal nergens iets bijzonders met het euro-teken. Gevolg: Het gaat vanzelf goed.in Theorie moet het ook gewoon kunnen maar in de Praktijk gaat er toch echt iets mis.
Waarom gaat het goed? Omdat het euro-teken gewoon onderdeel is van utf-8, die hoef je dus niet om te zetten naar een ascii-teken. Wanneer dat wél nodig is, gebruik je blijkbaar niet overal utf8.
Heb jij zowel de database, als de tabel als de kolom in de tabel op utf8 staan? In MySQL kun je namelijk vrij eenvoudig een mix maken van verschillende encodings. Dit kan je dan ook flink in de weg zitten...
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Zowel in de start van PHPmyAdmin heb ik toendertijd de encoding op handmatig utf8_unicode_ci gezet, als in de betreffende database, als in de betreffende tabel (gbook), als in de kolom (message).
Ik meende me ter herinneren dat je zelfs in zoiets simpels als NotePad(++) de Codering in kon stellen, daar dit nooit een probleem had opgeleverd heb ik hier eigenlijk nooit naar gekeken.
Wanneer ik de € plain in een html of php bestand zette werdt dit een vraagteken en toen dacht ik toch maar is naar die codering te kijken.
Wat blijkt nou, deze stond ingesteld op het Dos/Windows Formaat en de ANSI Codering, ik heb dit nu omgezet naar het Unix formaat en UTF 8 codering.
Iemand enig idee hoe ik dit ineen keer voor al mijn files kan doorvoeren want om nu alles handmatig te openen, wijzigen en vervolgens opnieuw op te slaan is ook een redelijke kromme methode.