Caratteri accentati utf8_unicode_ci con HTML PHP e MySql

di il
4 risposte

Caratteri accentati utf8_unicode_ci con HTML PHP e MySql

Buongiorno a tutti, mi sto arrovellando per un problema che ormai non dovrebbe essere così ostico.
Ho un database MySql con codifica utf8_unicode_ci e sto lavorando con una tabellina semplice semplice :

CREATE TABLE IF NOT EXISTS `clie_dati_testo` (
  `text_id` int(22) NOT NULL AUTO_INCREMENT,
  `text_cntcli_id` int(22) NOT NULL DEFAULT '0' COMMENT 'ass cliente contratto',
  `text_dom_id` int(22) NOT NULL DEFAULT '0',
  `text_testo` text CHARACTER SET utf8 COLLATE utf8_unicode_ci,
  `text_sche_id` int(22) NOT NULL,
  PRIMARY KEY (`text_id`),
  KEY `text_cntcli_id` (`text_cntcli_id`),
  KEY `text_dom_id` (`text_dom_id`),
  KEY `text_sche_id` (`text_sche_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='Dato selezionato da tabella generale' AUTO_INCREMENT=2 ;

poi ho una pagina che gestiste i dati e nell'header c'è impostato :

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Insomma tutto sembra a posto anche perché i dati nel database sono memorizzati esattamente come li ho scritti nel form. Esempio: se scrivo "l'amore più forte" vedo esattamente "l'amore più forte" .

Il problema nasce quando lo visiono nella pagina HTML, infatti il risultato è:
l'amore più forte
Ho provato molte soluzioni ma senza risultato, in ultima ho letto questo articolo:
http://www.alessandrosenese.eu/pillole/php-pillole/php-mysql-e-caratteri-utf8
che alla fine parla di BIN2HEX e HEX2BIN che proverei, se non fosse che ho la mia macchia ancora alla versione 5.3 di Apache e che se installo l'applicazione su un server NON aggiornato dalla versione 5.4 in su non funzionerebbe.

Prima di andare ad aggiornare Apache alla nuova versione, qualcuno si dirmi dove è l'errore?
Attendo vostre risposte con molta ansia anche perchè ci sto sbattendo da + di una settimana e non procedo. Uffa.
Grazie in anticipo.
Gianfranco

4 Risposte

  • Re: Caratteri accentati utf8_unicode_ci con HTML PHP e MySql

    Ciao Gianfranco,

    Assicurati di inviare il comando SET NAMES utf8 a MySQL dopo il collegamento, prima di eseguire qualsiasi query MySQL.

    Assicurati che la pagina è in realtà reso come utf-8 (se c'è un header HTTP Content-Type: text / html; charset = iso-8859-1, i browser non sono d'accordo su quale dovrebbe vincere).

    Se phpMyAdmin visualizza i dati inseriti come corretti, allora la mia scommessa è che non stai facendo nomi dei set utf8 dopo la connessione.

    Cristiana,
    #OracleCloud.
  • Re: Caratteri accentati utf8_unicode_ci con HTML PHP e MySql

    Buongiorno,
    Ad ogni pagina che gestisco con i dati nel database, parto con la connessione e l'impoitsazione del set
    $db = $dbobj->connect_db($db_server,$db_username,$db_password, $db_name);
    mysql_set_charset('utf8',$db);
    
    Ho provato ad aggiungere, consigliato da altri programmatori, anche :
    ini_set("mbstring.language", "Neutral");
    ini_set("mbstring.internal_encoding", "UTF-8");
    ini_set("mbstring.encoding_translation", "On");
    ini_set("mbstring.http_input", "auto");
    ini_set("mbstring.http_output", "UTF-8");
    ini_set("mbstring.detect_order", "auto");
    ini_set("mbstring.substitute_character", "none");
    ini_set("default_charset", "UTF-8");
    ini_set("mbstring.func_overload", 7);
    setlocale(LC_TIME, "it_IT.UTF-8");
    Ho eseguito anche una verifica che sia impostato correttamente :
    printf("Current character set: %s\n", $mysqli->character_set_name());
    Forse il problema nasce da come lancio il programma che poi fa l'aggiornamento al database.
    La chiamata è eseguita passando attraverso javascript ad una chiamata ajax.
    function aggiornatestosemplice( tela, iddom, gruppo, msgajax, idkeysche) {
    . . . . .
    	//var miaStringa = unescape(encodeURIComponent(document.getElementById(nomecampo).value));
    	var miaStringa = document.getElementById(nomecampo).value;
    	var miaStringanoHTMLTags = miaStringa.replace(/(<([^>]+)>)/ig, '');
    	miaStringanoHTMLTags = strip_tags(miaStringanoHTMLTags);
    . . . . . 
    	httptesto.open("POST", 'getAggiornaDati.php'  , true);
    	httptesto.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    	httptesto.setRequestHeader("Content-length", parameters.length);
    	httptesto.setRequestHeader("Connection", "close");
    	httptesto.onreadystatechange = handleHttpResponseTesto(httptesto, iddom);
    	httptesto.send(parameters);
    }
    La stringa come vedete è trattata (nella versione precedente non avevo toccato la stringa prima del passaggio alla chiamata ajax e non funzionava lo stesso.

    Confermo che anche nel programma getAggiornaDati dopo la connessione c'è l'impostazione del set.

    E ancora non capisco dove sia l'errore
  • Re: Caratteri accentati utf8_unicode_ci con HTML PHP e MySql

    Ciao,

    Nella funzione aggiornatestosemplice fai uno echo dopo ogni linea al testo per vedere se ti restituisce il testo che vuoi ricevere.

    Cristiana.
  • Re: Caratteri accentati utf8_unicode_ci con HTML PHP e MySql

    Cosa stupida ma da non sottovalutare: nel browser che usi, hai convertito in UTF 8?

    Nell'editor che usi hai attivato la codificazione UTF8 SENZA BOM?
Devi accedere o registrarti per scrivere nel forum
4 risposte