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