Quote Originariamente inviata da Alhazred Visualizza il messaggio
Allora, perché tutto funzioni devono avere la stessa codifica le seguenti cose:
- collation DB
- charset tabelle
- tag <meta charset="utf-8"> delle pagine (serve solo se deve mostrare il testo su una pagina, se è solo uno script php che elabora dati non serve)
- mysql_set_charset subito dopo la connessione al db
- charset dei file php
se tutto questo è impostato in modo corretto, i caratteri li avrai sempre codificati nel modo giusto.

Per il charset dei file scarica Notepad++ (è gratuito) aprili e guarda in basso a destra, deve esserci scritto "ANSI as UTF8", se non c'è scritto così, dal menu "Formato" scegli "Converti in UTF8 Senza BOM" e salva.
Sembra tutto come indicato da te:
In Notepad++ Per i due files del form e del processo e del file dove ho le funzioni personali:
- ANSI as UTF-8
- Codifica in UTF-8 (senza BOM)

In phpmyadmin:
- DB: Set di caratteri MySQL: UTF-8 Unicode (utf8)
- TABELLA: utf8_general_ci
- I campi testo: varchar(20) utf8_general_ci, naturalmente gli altri campi (int e timestamp) non hanno Collation

Nella funzione personale che crea le connessioni:
mysql_set_charset subito dopo la connessione al db fatto come si vede nel codice postato più sopra.

Questo nelle funzione:
if (!mysql_select_db($DBName, $link)) {
..............
}
mysql_set_charset('utf8');

CONCLUSIONE:
Sembra tutto come suggerito da te (ho sempre usato questa codifica perchè ho notato che è quella che da meno problemi). E' da molto che uso i FORM, ma è la prima volta che ho questo problema che pare non voglia risolversi.
Invece è la prima folta che uso le SESSION per spostare valori da una pagina ad un'altra.

Un piccolo dubbio mi viene che l'anomalia sia dovuta su come memorizzo i valori nelle SESSION e su come le leggo.