Allora, non ci credevo ma alla fine ho raggiunto un ulteriore nuovo livello di conoscenza sulla codifica charset, i charset non smetteranno mai di stupirmi, quando pensi di aver capito tutto c'è sempre qualcosa che ignori.
Allora, per prima cosa ho trovato che i file UTF-8 veri, es. se apro un file di testo con Scite, cambio l'encoding (File -> Encoding) in UTF-8, modifico qualcosa e salvo, sono uno sputacchio più grandi rispetto al corrispettivo ANSI a 8 bit.
Questo è dovuto al BOM (byte of mark se non sbaglio) che indica a qualsiasi applicativo che il file in questione è un UTF-8 e così viene aperto, interpretato e lavorato.
Piccolo inconveniente, il BOM si trova all'inizio del file e quando utilizzo un file UTF-8 con BOM in PHP questo genera sempre un output finto prima di ogni cosa, praticamente stampa il BOM, che è sostanzialmente invisibile, ma c'è e manda in palla il session_start() che deve essere eseguito prima di ogni output.
La soluzione è utilizzare file UTF-8 senza BOM, per ottenerli e per fare una prova ho usato questo script C# (data una cartella converte tutti i file presenti in questa e nelle sotto cartelle da ANSI a UTF-8 senza BOM)
codice:
static void Main(string[] args)
{
leggi(args[0]);
}
static void leggi(string cartella)
{
if (Directory.Exists(cartella))
{
DirectoryInfo di = new DirectoryInfo(cartella);
foreach (DirectoryInfo di2 in di.GetDirectories())
leggi(di2.FullName);
foreach (FileInfo fi in di.GetFiles())
Riscrivi(fi.FullName);
}
}
static void Riscrivi(string file)
{
UTF8Encoding utf8WithoutBom = new System.Text.UTF8Encoding(false);
StreamReader sr = new StreamReader(file, System.Text.Encoding.GetEncoding("iso-8859-1"));
StreamWriter sw = new StreamWriter(file + "_tmp", false, utf8WithoutBom);
while (!sr.EndOfStream)
{
Encoding utf_8 = Encoding.UTF8;
byte[] bytes = Encoding.GetEncoding("iso-8859-1").GetBytes(sr.ReadLine());
string s = utf_8.GetString(bytes);
sw.WriteLine(s);
}
sr.Close();
sw.Close();
File.Delete(file);
File.Move(file + "_tmp", file);
}
La cosa curiosa è che aprendo un file generato in questo modo con Scite mi viene visto come File -> Encoding -> 8 bit, ovvero come un normalissimo ANSI!!
In sostanzo ho fatto tutto questo giro di parole per dire che... il sito anche se è UTF-8 i file php, js, html, css e quant'altro devono comunque essere tutti ANSI!
Però c'è, almeno con Scite ed editor simili, il problema d'interpretazione del testo visualizzato, se apro il file con doppio click lo vede come 8 bit, se scrivo in esso in cirillico non ci riesce, si vedono tutti ?????, se salvo anche sul browser si vede male. In sostanza, solo se il file contiene effettivamente caratteri strani come il cirillico, almeno con Scite bisogna aprire il file, modificare l'Encoding a mano in UTF-8, lavorare sul file e infine prima del salvataggio finale rimettere l'encoding a 8 bit (vedrete tutto il testo strano che diventerà ancora più strano) e salvare.
Anche se su Scite si vedrà male sul browser si vedrà bene.
Conducendo delle ricerche ho capito che esistono IDE con i quali si può imporre l'utilizzo di UTF-8 senza BOM per un sito e che quindi sono in grado di visualizzare correttamente il contenuto dei file continuando a salvarli correttamente, quali IDE siano non lo so, non ho approfondito ma ci sono.
Oltre al discorso dei file, che è comunque molto importante, vanno fatte anche delle operazioni a livello di HTML, PHP e Database:
1° nell'HEAD html mettere
codice:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
2° nel PHP va imposto l'header UTF-8
Codice PHP:
header('Content-Type: text/html; charset=utf-8');
3° Se si usa MySql il database e le tabelle devono essere utf8_general_ci
4° Sempre se si usa MySql quando si apre la connessione al DB appena aperta la connessione va imposta la direttiva di utilizzo UTF-8, con una query non select "SET NAMES UTF8".
5° Accantonate le conversioni in htmlentities su PHP o gli escape javascript (se usate ajax), se i file sono salvati bene e le regole precedenti sono state eseguite alla lettera il vostro sito prenderà e visualizzerà pure il giapponese senza problemi di sorta 
Seguendo queste regole e salvando i file a 8 bit almeno per il momento non ho avuto più problemi di sorta nel visualizzare e modificare nel db carattari particolari (es. °) e stranieri (es. cirillico).
Saluti a tutti!