Volete che il vostro sito supporti le lettere accentate e i caratteri speciali, senza che sia necessario ricorrere agli shortcut del iso-8895-1? Perfetto: basta usare la tabella dei caratteri chiamata UTF-8.
Farlo è decisamente semplice, ma è necessario porre attenzione ad un paio di cose. La prima è che bisogna impostare nei meta tag il charset, ovvero proprio la tavola di codifica dei caratteri:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Ma questo non basta. E' necessario che il server web (IIS / APACHE) e in particolare la configurazione del sito, sia impostata per erogare pagine in quel formato, indicandolo nel protocollo. Per fare questo o accedete alle impostazioni del server, oppure tramite i linguaggi server side, potete impostarlo.
Vi presento come farlo per i principali linguaggi di scripting: Coldfusion, PHP, ASP.
UTF in Coldfusion
In Coldfusion il content-type si setta con l'istruzione:
<cfprocessingdirective pageencoding="utf-8" >
<cfcontent type="text/html; charset=utf-8">
Nota bene: è fondamentale che le due iscruzioni siano in testa alla pagina, prima di ogni altra cosa. Se avete un file Application.cfm nella cartella, deve essere nella riga 1 di quel file. In aggiunta potete inserire anche:
<cfscript>
SetEncoding("form","utf-8");
SetEncoding("url","utf-8");
</cfscript>
Per approfondire consiglio la lettura di How to enable unicode in Coldfusion.
UTF in PHP
In PHP invece si usa questa istruzione:
<?php header('Content-Type: text/html; charset=utf-8'); ?>
UTF in ASP / ASP.NET
E in ASP / ASP.NET questa:
<%Response.charset="utf-8"%>
Se ne volete sapere di più consiglio la lettura di O-HTTP-CHARSET.
Salve,
sono roberto amministratore del blog
http://linuxfreedomforlive.blogspot.com
intanto complimenti per il blog
sono appena diventato fans del tuo sito nella tua pagina facebook
volevo chiederti se potevi contraccambiare
la mia pagina la trovi
http://www.facebook.com/pages/LinuX-Freedom-for-Live/290943601160
ciao
Ma secondo te il tuo commento è inerente all’argomento? Ma per favore…
La gestione delle lettere accentate e’ davvero un calvario per noi poveri sviluppatori. Pensa che forzo l’UTF-8 in tutti i modi … anche con Spring nel mio web.xml in questo modo:
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
E a volte non basta …
Infatti @Francesco la cosa non è molto chiara. Ad esempio coldfusion nativamente pubblica in UTF-8, ma ti garantisco che in un sito le ho provate tutte, senza risultato. Alla fine ho messo il meta a iso-8859-1, in modo che dreamweaver lo riconoscesse. Quindi fatto copia e incolla di tutti i testi, in modo che DW li convertisse nella notifica standard. Vitaccia…
L’UTF-8 va impostato prima di tutto su Apache, poi su MySQL sia nelle tabelle che nelle connessioni, poi su PHP possibilmente sul file php.ini, altrimenti in questo modo:
ini_set(‘default_charset’, ‘utf-8’);
L’istruzione dell’articolo infatti non imposta la codifica di PHP ma manda un header HTML, cosa che non serve se dopo nel documento abbiamo il metatag. Laddove non si ha l’accesso alle impostazioni di MySQL, si può dare questa query in PHP prima di tutte le altre:
mysql_query(“SET NAMES ‘utf8′”);
Ma ancora così può non bastare! Se abbiamo salvato il nostro documento con una codifica diversa, avremo di nuovo il maledetto quadratino nero con il punto interrogativo dentro, segno di un carattere UTF-8 non riconosciuto.
Con questo ho coperto tutti i possibili casi: non ce ne sono altri.
Quando invece al posto di una lettera accentata abbiamo DUE lettere esotiche, è il sintomo che i dati sono in UTF-8, mentre invece è stata dichiarata un’altra codifica.
Grande @Giovanni . Però potremo anche continuare parlando del BOM dei file, ovvero dell’ordinamento dei byte nella codifica dei file. E’ un macello: http://unicode.org/faq/utf_bom.html
Il W3C fornisce addirittura un verificatore online: http://people.w3.org/rishida/utils/bomtester/
Nel BOM non mi sono mai addentrato, non è mai stato un problema per me.
Hola,
@Merlinox da un occhio al blog con chrome, il layout è sputtanatissimo dal fine dell’articolo al fondo :-S
@Giovanni & @All io in PHP uso sempre utf8_decode & utf8_encode, oltre all’header html dell’articolo e le impostazioni nel DB. Purtroppo il php.ini non me lo fanno toccare nel mio hosting, -__- devo decidermi a switchare su un virtuale/dedicato…
O porca paletta… non so cosa diavolo sia successo @joel! Mannaggia… uff… io non ho toccato nulla, sarà qualche plugin! Mi dai una mano?
Prova a disabilitare i plugin uno alla volta per trovare il “colpevole”.
In fondo al sito ho trovato questo:
height non è chiuso
l’apice di chiusura dell’alt è sbagliato, non è un ” ma un ”
dopo border c’è un pelo di confusione
Non penso sia il colpevole ma correggere un errorino non fa mai male… il codice del blog è parecchio incasinato, non trovo l’errore, ma sembra che sia nel navbar.
Mi ha arato il codice, -__- riga 990 di questa pagina, quella di hiddy.
Il buchetto era in un widget, ma non è quello il problema. Porca miseria non lo trovo 🙁
Grazie infinite a @capobecchino e a @arquen di meemi per avermi aiutato nella risoluzione del problema al layout!
@ferramroberto
E’ lo stesso commento spiccicato che ha messo sul mio blog. Mi è rimasto impresso dalla frase “sono diventato fans”. Io l’ho prontamente taggato come “spamS” XD
ciao sto impazzendo ed ho provato di tutto, sapreste indicarmi su questo codice come posso fare per la codifica dei caratteri speciali?
<%
' Session.CodePage=65001
' Response.Charset="UTF-8"
' Response.ContentType = "text/xml"
On Error Resume Next
Dim database, nome, id
Dim contatore, pag, quanti, inizio, fine
pag = Request.QueryString("pag")
If IsNumeric(pag) = False Or pag < 1 Then pag = 1
quanti = 5
Set database = Server.CreateObject("Microsoft.XMLDOM")
database.Async = False
database.Load Server.MapPath("db/bookmark.xml")
Set id = database.getElementsByTagName("utente/id")
Set nome = database.getElementsByTagName("utente/nome")
If pag = 1 Then
inizio = 1
fine = quanti
Else
inizio = ((pag * quanti) – quanti) + 1
fine = Round((quanti / 2) + inizio)
End If
With Response
For contatore = inizio To fine
.Write "”
.Write id(contatore – 1).Text & “. ”
.Write nome(contatore – 1).Text
.Write “”
Next
End With
contatore = 1
With Response
.Write “”
For contatore = 1 To Round(nome.Length / quanti)
If CInt(contatore) = CInt(pag) Then
.Write “[” & contatore & “] ”
Else
.Write “[”
.Write contatore
.Write “] ”
End If
Next
.Write “”
End With
Set nome = Nothing
Set database = Nothing
%>