Visualizzazione risultati 1 fino 13 di 13

Discussione: Problema lettere accentate

  1. #1
    ShadowLand non è connesso Neofita
    Data registrazione
    17-01-2012
    Messaggi
    9

    Predefinito Problema lettere accentate

    Salve, mi è stato suggerito di aprire una nuova discussione per esporre più nel dettaglio il problema che affligge alcune delle pagine contenute nel mio sito.

    Premetto che non sono una programmatrice, il sito è amatoriale e la base è un Open Source modificato nel corso degli anni da più mani.

    Da qualche giorno alcune pagine che erano già presenti nel sito da anni, appaiono con una codifica che non mostra accenti ed apostrofi. Al posto di à, è, ì, ò, ù compaiono di colpo simboli come ù, è, ’ e via dicendo.

    Questo accade soltanto per tutto ciò che è stato creato prima di Febbraio del corrente anno. Non so se ci sono state modifiche interne ad altervista o qualcosa di simile, fatto sta che se provo ad inserire qualcosa di nuovo la codifica funziona senza alcun problema.

    Con la versione 7.1 non mi ha mai dato problemi, l'unica cosa che ho notato che è cambiata in DB è la codifica: utf8 che da quella impostata per le mie pagine utf8_general_ci è diventata utf8mb3_general_ci
    che anche volendo reimpostare il tutto non mi compare più nella lista la codifica utf8_general_ci

    Ho controllato ogni singola pagina ma non sembra presentare problemi, ho anche provato ad applicare i suggerimenti presenti in una sezione analoga del forum: https://forum.it.altervista.org/php-...accentate.html ma niente di fatto, le vecchie pagine restano invariate.

    Lavoro ai file mediante Filezilla (ultima versione rilasciata), ho anche forzato la codifica delle pagine ma nulla. Se controllo da Altervista le pagine sembrano a posto. Proprio come detto dall'utente nel link postato precedentemente, "Ho controllato la codifica di tutto, dal database a ogni singola pagina, funzioni, charset e includes ed è corretta: UTF-8. Quindi non capisco a cosa sia dovuto il problema e soprattutto se si possano ripristinare gli accenti corretti, perché riscrivere più di 200pagine con gli accenti giusti sarebbe quanto mai problematico"

    Ringrazio in anticipo chi potrà donarmi qualche minuto del suo tempo.

  2. #2
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,262

    Predefinito

    Hai provato a impostare il charset su mysql? Se usi pdo, vedi qui: https://forum.it.altervista.org/php-...ml#post1404365

    Da phpMyAdmin vedi i caratteri corretti?

    Ciao!

  3. #3
    ShadowLand non è connesso Neofita
    Data registrazione
    17-01-2012
    Messaggi
    9

    Predefinito

    Ho impostato i caratteri del DB tutti in utf8mb4_unicode_ci come mi è stato suggerito, facendolo anche per tutti i file interni ma nonostante questo non viene applicata alcuna modifica automatica con quanto già presente. Se creo un nuovo campo invece non presenta questa problematica. Mi viene da pensare che l'unica soluzione che mi resta è quella di armarmi di pazienza e intervenire su ogni singola pagina per modificarne il contenuto.

  4. #4
    ShadowLand non è connesso Neofita
    Data registrazione
    17-01-2012
    Messaggi
    9

    Predefinito

    Da phpMyAdmin nei moduli i caratteri restano non codificati pur modificandone la codifica, le lettere accentate e alcuni caratteri come questo ° vengono restituite così: ù, è, ° mentre gli apostrofi vengono restituiti correttamente.
    Non so più cosa provare onestamente.

  5. #5
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Io dal pannello altervista modifica php ho tre scelte tra cui 7.3 e non 7.1, puoi provare nuovamente impostando 7.3 e dopo controlli il file .htaccess tramite gestione file del pannello altervista?

    Però php 5.6 non possiede la patch del sorgente C++ Mysql Native Driver "MYSQLND" applicata dopo per usare esplicitamente la forma corretta di utf8mb4 o utf8mb3 di default tramite argomento mysqli_set_charset poiché utf8 è deprecato perché può diventare alias di utf8mb4 invece del utf8mb3. (Se imposta php 7.3 non è il suo problema ma più che altro coerenza di codice).
    Ultima modifica di darbula : 16-02-2023 alle ore 22.42.10

  6. #6
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,262

    Predefinito

    Se da phpMyAdmin non vedi le lettere correttamente, i dati salvati su db sono in un formato differente da quello impostato su phpMyAdmin.

    Tu sai con quale codifica son stati salvati i dati?
    Potresti provare a rilevare la codifica con mb_detect_encoding, così da vedere in che formato sono salvati i dati, nel caso puoi convertirli in un altro formato o impostare il charset corretto della pagina.

    Ciao!

  7. #7
    ShadowLand non è connesso Neofita
    Data registrazione
    17-01-2012
    Messaggi
    9

    Predefinito

    Citazione Originalmente inviato da darbula Visualizza messaggio
    Io dal pannello altervista modifica php ho tre scelte tra cui 7.3 e non 7.1, puoi provare nuovamente impostando 7.3 e dopo controlli il file .htaccess tramite gestione file del pannello altervista?

    Però php 5.6 non possiede la patch del sorgente C++ Mysql Native Driver "MYSQLND" applicata dopo per usare esplicitamente la forma corretta di utf8mb4 o utf8mb3 di default tramite argomento mysqli_set_charset poiché utf8 è deprecato perché può diventare alias di utf8mb4 invece del utf8mb3. (Se imposta php 7.3 non è il suo problema ma più che altro coerenza di codice).
    Ho ricontrollato ed è impostato tutto correttamente, versione 7.3, idem per i file, le versioni Php che vengono visualizzate nel mio menu sono: 5.6, 7.3, 8

  8. #8
    ShadowLand non è connesso Neofita
    Data registrazione
    17-01-2012
    Messaggi
    9

    Predefinito

    La codifica originale era in utf8_general_ci però appunto, essendo deprecata attualmente l'ho reimpostata con la nuova per tutte le cartelle nonché per il DB ma il risultato non cambia.
    Proverò a seguire il consiglio, grazie.

  9. #9
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Se provi come consigliato precedentemente?
    Codice PHP:
    <?php
    $dbhost
    = "localhost";
    $dbuser = "shadowland";
    $dbpass = ""; // anche stringa vuota
    $dbname = "my_shadowland";

    $conn = mysqli_connect($dbhost,$dbuser,$dbpass,$dbname);
    mysqli_query($conn,"SET NAMES 'latin1'");
    mysqli_set_charset($conn, 'latin1');
    /* effettuare una query e controllare il valore tramite urlencode e stampa con var_dump var_dump(urlencode()); */

    ?>
    Mentre da mysql 8 o successivo per i nuovi dati cioè nativi di utf8mb4 o utf8mb3 dovrai utilizzare almeno php 7.3 e cambiare l'istruzione SQL con COLLATE aggiunto
    Codice PHP:
    mysqli_query($conn, "SET NAMES 'utf8mb3' COLLATE 'utf8mb3_general_ci'");
    mysqli_set_charset($conn, 'utf8mb3');
    Ultima modifica di darbula : 17-02-2023 alle ore 14.51.19

  10. #10
    ShadowLand non è connesso Neofita
    Data registrazione
    17-01-2012
    Messaggi
    9

    Predefinito

    Si ho provato a seguire il suggerimento ma non cambia niente, questa è la parte di codice che ho nella mia pagina:

    Codice PHP:
    /**
    * Funzionalità di dialogo col database
    * Set di funzioni da core che implementano il dialogo gestito col db
    */

    /**
    * Connettore al database MySql
    */
    function gdrcd_connect()
    {
    static
    $db_link = false;

    if (
    $db_link === false)
    {
    $db_user = $GLOBALS['PARAMETERS']['database']['username'];
    $db_pass = $GLOBALS['PARAMETERS']['database']['password'];
    $db_name = $GLOBALS['PARAMETERS']['database']['database_name'];
    $db_host = $GLOBALS['PARAMETERS']['database']['url'];
    $db_error = $GLOBALS['MESSAGE']['error']['db_not_found'];

    #$db = mysqli_connect($db_host, $db_user, $db_pass)or die(gdrcd_mysqli_error());
    #mysqli_select_db($db_name)or die(gdrcd_mysqli_error($db_error));


    mysqli_query($db, "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'");
    mysqli_set_charset($db, 'utf8mb4');

    /* effettuare una query e controllare il valore tramite urlencode e stampa con var_dump var_dump(urlencode()); */


    $db_link = mysqli_connect($db_host, $db_user, $db_pass, $db_name);

    if (
    mysqli_connect_errno())
    gdrcd_mysqli_error($db_error);
    }

    return
    $db_link;
    }

    /**
    * Chiusura della connessione col db MySql
    * @param resource $db: una connessione mysqli
    */
    function gdrcd_close_connection($db)
    {
    mysqli_close($db);
    }
    Ultima modifica di ShadowLand : 20-02-2023 alle ore 11.05.37

  11. #11
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Per i dati precedenti "vecchi" prova con latin1.
    Codice PHP:
    <?php
    /**
    * Funzionalità di dialogo col database
    * Set di funzioni da core che implementano il dialogo gestito col db
    */

    /**
    * Connettore al database MySql
    */
    function gdrcd_connect()
    {
    static
    $db_link = false;

    if (
    $db_link === false)
    {
    $db_user = $GLOBALS['PARAMETERS']['database']['username'];
    $db_pass = $GLOBALS['PARAMETERS']['database']['password'];
    $db_name = $GLOBALS['PARAMETERS']['database']['database_name'];
    $db_host = $GLOBALS['PARAMETERS']['database']['url'];
    $db_error = $GLOBALS['MESSAGE']['error']['db_not_found'];

    #$db = mysqli_connect($db_host, $db_user, $db_pass)or die(gdrcd_mysqli_error());
    #mysqli_select_db($db_name)or die(gdrcd_mysqli_error($db_error));



    $db_link = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
    mysqli_query($db_link, "SET NAMES 'latin1'");
    mysqli_set_charset($db_link, 'latin1');

    if (
    mysqli_connect_errno())
    gdrcd_mysqli_error($db_error);
    }

    return
    $db_link;
    }

    /**
    * Chiusura della connessione col db MySql
    * @param resource $db: una connessione mysqli
    */
    function gdrcd_close_connection($db)
    {
    mysqli_close($db);
    }
    $db_link = gdrcd_connect();
    Impostare la codifica dopo la connessione e non prima.

    In sintesi per prelevare dati nel database si utilizza l'istruzione SQL SELECT, che convertito in stringa php è qualcosa come
    Codice PHP:
    $var = mysqli_query($db_link, 'SELECT * tabella');
    var_dump(urlencode($var['nome_campo']));
    Ultima modifica di darbula : 20-02-2023 alle ore 15.41.18

  12. #12
    ShadowLand non è connesso Neofita
    Data registrazione
    17-01-2012
    Messaggi
    9

    Predefinito

    Sei un genio! Sono riuscita a risolvere!
    Ultima modifica di ShadowLand : 20-02-2023 alle ore 19.52.33

  13. #13
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Figurati il tuo applicativo (il codice php, purtroppo non usa codice legacy che è necessario qui su altervista), prima o poi se i dati minori e se piccoli dovrebbero essere convertiti. Significa se i nuovi dati utf8mb4 sono perfettamente rappresentabili in latin1 dovrai documentarti su come fare (ovviamente prima occorre il backup del database per tornare con i dati originali prima che il malfunzionamento si verifichi).
    Ultima modifica di darbula : 20-02-2023 alle ore 23.12.40

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •