Archief - UTF-8 encoding

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

sarnath

Legacy Member
Ik heb iets vaags voor indien ik gebruik maak van htmlentities.

Als ik dit insert in mijn database:

$string = "coupé";
mysql_query("insert into tabel(titel) values('" . htmlentities($string, ENT_QUOTES, "UTF-8" ) . "')");

dan staat daar coupé

Dit terwijl mijn webpagina UTF-8 is alsook mijn database.

Moest ik gewoonweg inserten via deze weg:
mysql_query("insert into tabel(titel) values('$string')");
dan staat in mijn database: Coupé wat dus UTF-8 is.

Hoe komt dit?

Albireo

Legacy Member
Die functie htmlentities doet gewoon wat ze moet doen: "all characters which have HTML character entity equivalents are translated into these entities." é wordt dus vervangen door é

Waarom gebruik je daar eigenlijk htmlentities? Wat je daar zou moeten gebruiken is mysql_real_escape_string

sarnath

Legacy Member
Albireo zei:
Die functie htmlentities doet gewoon wat ze moet doen: "all characters which have HTML character entity equivalents are translated into these entities." é wordt dus vervangen door é

Waarom gebruik je daar eigenlijk htmlentities? Wat je daar zou moeten gebruiken is mysql_real_escape_string

idd die laatste gebruik ik ook.
Ik gebruikte qua extra beveiliging htmlentities.
K ben gewoonweg nooit goed geweest in encodingtoestanden en denk dat ik idd te vergezocht bezig ben geweest.

adrianhates

Legacy Member
sarnath zei:
idd die laatste gebruik ik ook.
Ik gebruikte qua extra beveiliging htmlentities.
K ben gewoonweg nooit goed geweest in encodingtoestanden en denk dat ik idd te vergezocht bezig ben geweest.

encoding problemen zijn de problemen waar webdevelopers veel mee te maken krijgen :p

sarnath

Legacy Member
Ben even aant experimenteren geweest en heb hieromtrent enkele vragen:

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl">  
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>test</title>

</head>
<body>
<?php
$string = "coupé";
$string2 = "Coupé";
$string3 = "Coup&eacute;";

echo $string;
echo "<br/>";
echo htmlentities($string,ENT_QUOTES,"utf-8");
echo "<br/>";
echo $string2;
echo "<br/>";
echo htmlentities($string2,ENT_QUOTES,"utf-8");
echo "<br/>";
echo $string3;
echo "<br/>";
echo html_entity_decode($string3, ENT_QUOTES, "utf-8" );
echo "<br/>";
?>
</body>
</html>

A.De derde echo wordt niet weergegeven (dus echo htmlentities($string,ENT_QUOTES,"utf-8");)

B. Stel ik maak een webpagina in UTF-8 waarin ik het woord coupé zet, dan kan ik dit doen door "Coupé" of "Coup&eacute;" te typen.
Deze laatste krijg je door de htmlentities van de eerste te nemen.
Nu vraag ik mij af, wat is het nut van die htmlentities, want beide worden weergegeven.
html_entity_decode is dan toch niet nodig?

dJeez

Legacy Member
sarnath zei:
Moest ik gewoonweg inserten via deze weg:
mysql_query("insert into tabel(titel) values('$string')");
dan staat in mijn database: Coupé wat dus UTF-8 is.
Err, neen dat wijst er eerder op dat je latin1 gebruikt voor ofwel de database, ofwel de connectie waarmee je de data in je database pompt. Als je correct werkt met UTF-8 encoding dan zou je ook Coupé in de DB te zien moeten krijgen.

Aangezien je MySQL gebruikt : zorg ervoor dat je je tabellen creëert met utf8_general_ci encoding (dat is de meest courante optie) èn let erop dat je na het openen van de connectie met je DB steeds volgende query uitvoert :
Code:
SET NAMES 'utf8'
, dan specifieer je dat je queries (en data) in utf-8 wenst te verzenden en ontvangen.

sarnath

Legacy Member
ideaal, had blijkbaar mijn connectie op utf-8 en mijn db ook, maar de tabellen apart stonden idd op latin...

Na dit toe te voegen SET NAMES 'utf8' werkt idd alles.

Bedankt :)

sarnath

Legacy Member
Toch nog een vraagje.
Ik heb bijvoorbeeld ook pagina's met tekst die niet uit een database komen.
Dus gewoon een hardgecodeerde .php file.

Als ik daar in de header plaats:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

En dan bijvoorbeeld "coupé" of een ander woord met een speciaal karakter typ, dan staat er coup<><>, dus in plaats van de é twee ruitjes met een vraagteken.

Hoe komt dit?

Albireo

Legacy Member
Dan moet je eens nakijken of je editor z'n bestanden wel bewaard met UTF-8 encoding (bij voorkeur zonder BOM als je die keuze hebt). Waarschijnlijk gebruikt die nu ANSI of ASCII ofzoiets...

sarnath

Legacy Member
Albireo zei:
Dan moet je eens nakijken of je editor z'n bestanden wel bewaard met UTF-8 encoding (bij voorkeur zonder BOM als je die keuze hebt). Waarschijnlijk gebruikt die nu ANSI of ASCII ofzoiets...

Bedankt, had het weer te ver gezocht, in mijn editor in windows is het daarmee opgelost, in Linux nog niet, maar ik weet nu dat het hierdoor komt :)

bedankt

sarnath

Legacy Member
Weeral een vreemd probleem, zal het hier posten aangezien het met het topic te maken heeft, maar ik zit met een vreemde situatie.

Indien in mijn index.php opsla als UTF-8 en dan via mijn site inlog en op de link userpanel klik krijg ik de melding dat ik moet inloggen, de sessie is dus blijkbaar weg.

Indien ik mijn pagina index.php hernoem naar index2.php en dan naar deze pagina navigeer en inlog werkt alles wel.

Iemand enig idee hoe zoiets komt? (ik weet dat het nogal wazig is :s)

EDIT: heb een oplossing gevonden, maar zou niet direct weten hoe het komt.
In windows met notepad++ converteren naar utf-8 zorgt ervoor dat speciale tekens correct worden weergegeven, maar mijn sessies verlopen om de een of andere reden.

In Ubuntu met Jedit openen en opslaan als utf-8 zorgt ervoor dat alles prima werkt.

Het is dus blijkbaar een editorprobleem, maar dat verklaart nog altijd niet dat als ik het bestand hernoem dat het dan wel werkt...
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan