problema con la codifica caratteri accentati e speciali tra php e mysql

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Buongiorno a tutti.
Sto facendo una prova per cercare di risolvere il problema che riscontro quando registro nel db MySql lettere accentate, i gradi (°) e il simbolo dell'euro.
Situazione su register.it (dove abbiamo l'hosting Linux):
Versione MySql: 5.5.34
Versione PHP: 6.1
Ho creato una tabella (testutf) con 2 campi, un progressivo e un campo varchar(16) con codifica utf8_general_ci.
Poi ho preparato questa paginetta:
PHP:
<?php
mb_internal_encoding('UTF-8');


?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Inserimento Ricette per le Dispense</title>
<link href="backoffice.css" rel="stylesheet" type="text/css" />


</head>

<body>

<form name="pippo" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" />
  <input type="text" name="pippo" Size="8">
  <input type="submit" name="submit" value="vai">
</form>

<?
$pippo = $_POST['pippo'];

echo $pippo;

if (isset($_POST['submit']))
registra();

function registra() {
  $pippo2 = $_POST['pippo'];
  echo $pippo2;
 // $pluto = htmlentities($pippo2);
  include 'backoffice/connect.php';
  $query = ("INSERT INTO testutf VALUES ('', '$pippo2')");
  $result1 = mysql_query($query);
  echo "<br>fatto";
}

?>
</body>
</html>

Fino all'invio della query il carattere viene visualizzato correttamente.
Quindi il problema risiede nel momento dell'esecuzione della query, ma non riesco a capire quale sia questo problema...
Come vedete, la pagina php inizia con l'attribuzione della codifica utf8, e anche nell'head della parte html ho inserito la stessa cosa.
Quando vado nel db a guardare cosa è stato registrato, invece di € trovo sempre €, anche cambiando diverse codifiche (utf8_bin, o altre).
Devo forse aggiornare MySql? O magari basterebbe utilizzare Mysqli (che non uso ancora...)?
Grazie per i suggerimenti.
A presto...
 
Tanto per dare un seguito:
Ho risolto utilizzando MySqli e cambiando la pagina come segue:
Codice:
<?php
mb_internal_encoding('UTF-8');


?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Inserimento Ricette per le Dispense</title>
<link href="backoffice.css" rel="stylesheet" type="text/css" />


</head>

<body>

<form name="pippo" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" />
  <input type="text" name="pippo" Size="8">
  <input type="submit" name="submit" value="vai">
</form>

<?
$pippo = $_POST['pippo'];

echo $pippo;

if (isset($_POST['submit']))
registra();

function registra() {
  $pippo2 = $_POST['pippo'];
  echo $pippo2;
 // $pluto = htmlentities($pippo2);
  $mysqli = new mysqli('hostingmysql238.register.it','RG6819_gandalf','gandalfwhite','teatro7_com_catering');
  if ($msqli->connect_error) {
    die('Errore di connessione (' . $mysqli->connect_errno . ')' . $mysqli->connect_error);
  }else{
    $mysqli->set_charset("utf8");
    echo 'Connesso' . $mysqli->host_info . "\n";
    echo $pippo2;
    $query = "INSERT INTO testutf VALUES ('','$pippo2')";
    if(!$mysqli->query($query)) {
      die($mysqli->error);
    }
  }
 
}

?>
</body>
</html>
Ora l'inserimento funziona correttamente.
lascio qui la paginetta, dovesse servire a qualcuno.
Alla prossima
 
Proseguo qui poichè si tratta della "coda" di questo problema.
Utilizzando quindi mysqli e relativa codifica utf8 va tutto bene, tranne una cosa:
ogni volta che in un campo di testo inserisco un apostrofo (e in italiano se ne usano parecchi, mi sono reso conto...) lo script si blocca, dando errori a caso (in realtà dipende solo dal punto in cui trova l'apostrofo, naturalmente).
Come risolvo questo fastidioso problema?
Grazie
 

Discussioni simili