Spiego l'ambiente ed il problema.
il DB ha: Collation utf8_general_ci
i campi sono del tipo varchar(150) utf8_general_ci
la pagina ha: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Quindi, secondo me le due interfacce, la pagina PHP ed il MYSQL, sembrano allineate nella codifica ma si comportano in modo diverso.
Cerco di inserire questi dati (esempio banalissimo):
mikè
città

Ebbene mi trovo in questa situazione:
Nel DB vengono registrati:
mikè
cittÃ
Ritornando al form in caso di errore mi ritrovo:
mik�
città
Leggendo i dati dal DB nella pagina mi ritrovo con i dati giusti.
Qui di seguito metto due frammenti di codice:
uno per la preparazione dei dati e l'altro per richiamarli nella pagina.

Per il momento uso solo stripslashes e addslashes. Ma ho provato, uno alla volta, anche con tutti gli altri controllo ora commentati
Codice PHP:
$errors = array();
$values = array();
for(
$i=0;$i<count($fields);$i++) {
    if (
trim($_REQUEST[$fields[$i]]) == "") {
        if (
in_array($fields[$i], $fields_request)) {
            
$errors[] = "<font color='RED'>E' necessario inserire il campo " $fields[$i] . "</font>";
        }
    } else {
        
$value $_REQUEST[$fields[$i]];
        
$value stripslashes($value);
//        $value = htmlentities(get_magic_quotes_gpc() ? stripslashes($value) : $value);        
//        $value = utf8_decode($value);
//        $value = htmlspecialchars_decode(htmlentities($value));
//        $value = htmlspecialchars_decode($value);
//        $value = htmlentities($value, ENT_COMPAT, 'UTF-8');
//        $values[$fields[$i]] = mysql_real_escape_string($value);
        
$values[$fields[$i]] = addslashes($value);
        
$_SESSION['sess_' $fields[$i]] = $value;
    }

Per visualizzare i dati uso il classico:
Codice PHP:
$Query_user "select * from " $table;
echo 
$Query_user "<br />\n";
$result mysql_query($Query_user);
$num_row mysql_num_rows($result);
$numfields mysql_num_fields($result);
$fields = array(); 
for (
$i=0$i $numfields$i++) {
    
$fields[] = mysql_field_name($result$i);
}
echo 
$num_row " record letti<br />\n";
echo 
"<table>\n";        
echo 
"<tr>\n";
for (
$i=0$i $numfields$i++) {
    echo 
"<td>" $fields[$i] . "</td>\n";
}
echo 
"</tr>\n";
while (
$row mysql_fetch_array($result)) {
    echo 
"<tr>\n";
    for (
$i=0$i $numfields$i++) {
        echo 
"<td>" $row[$fields[$i]] . "</td>\n";
    }
    echo 
"</tr>\n";
}
echo 
"</table>\n"
Si potrà pensare che se i dati si visualizzano correttamente ci si può trovare soddisfatti. Ma temo che questo possa incidere su ricerche mirate.

Grazie per l'aiuto