Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2020
    Messaggi
    7

    Caratteri accentati non visualizzati correttamente sul server

    Salve a tutti,
    sto sviluppando un'applicazione PHP Mysql in locale e funziona correttamente.
    Adesso che ho provato a fare dei test caricando sorgente e DB sul server, i caratteri accentati non vengono visualizzati.

    Quello che ho fatto:

    • Ho controllato i tag su head,
      <meta charset="utf-8">
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
    • Ho inserito la funzione php nell'header.php come prima riga dopo </header>
      header('Content-Type:text/html; charset=utf-8');


    La mia configurazione:
    • scrivo il codice con Notpad++ e ho impostato il formato in Codifica in utf-8
    • il database sia in locale che in remoto ha codifica: utf8mb4_general_ci
    • In locale uso XAMPP php 7.4 su windows 10 home
    • il sito in remoto è su Aruba Linux, a questo indirizzo:
      http://www.bbcentroantico.com/phs/difformita.php


    Mi sapreste dire cortesemente cosa altro devo controllare e corregere?
    Grazie tante

  2. #2
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,000
    Io li vedo.

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Leggi il post in evidenza sui caratteri strani.

  4. #4
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,657
    l'errore lo vedo solo nelle celle di intestazione della tabella nel form.
    nelle altre celle non vedo caratteri speciali, puoi inserirli?

    in ogni caso le intestazioni php vanno inserite prima del codice html

    la definizione del charset serve una sola volta, due sono inutili.
    usa solo lo standard <meta charset="utf-8"> di html5

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2020
    Messaggi
    7
    Quote Originariamente inviata da Vincent.Zeno Visualizza il messaggio
    l'errore lo vedo solo nelle celle di intestazione della tabella nel form.
    nelle altre celle non vedo caratteri speciali, puoi inserirli?

    in ogni caso le intestazioni php vanno inserite prima del codice html

    la definizione del charset serve una sola volta, due sono inutili.
    usa solo lo standard <meta charset="utf-8"> di html5
    Grazie a tutti per le risposte.
    Vincent, ci hai visto bene, grazie, ho inserito una riga piena di accenti e viene visualizzata correttamente.

    http://www.bbcentroantico.com/phs/de...nte.php?id=194

    Ho controllato il codice e ho visto che avevo inserito la funzione htmlspecialchars solamente per i dati e non per le intestazioni.
    Ora però è successa una cosa strana, ho inserito htmlspecialchars anche nella visualizzazione delle intestazioni però l'intestazione "città" non viene proprio più visualizzata.
    Questo è il codice per la visualizzazione della intestazione



    Codice PHP:
    $sql_2 "SELECT label_name FROM labels WHERE col_name = '$property->name'";
    $result_2 mysqli_query($conn,$sql_2);
    $queryResult_2 mysqli_num_rows($result_2);

                    if (
    $queryResult_2) {    
                        
    $row_2 mysqli_fetch_array($result_2);

                        
    $label $row_2['label_name'];
                    } else {
                        
    $label $property->name;
                    }
                        echo 
    '<td>' htmlspecialchars($label) . '</td>';  //get field name for header 

    E questo il codice per la visualizzazione dei dati:

    Codice PHP:
    foreach ($temp_property as $item) {
         
    $type "text";
         
    $class "input2";
         
    $value htmlspecialchars ($row[$item]); 

         echo 
    '<td><input class="'.$class.'" type="'.$type.'" $checked value="'.$value.'" name="'.$item.'" 
    $readonly ></td>'
    ;


    Ultima modifica di eiasu; 16-03-2021 a 14:28

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    189
    così si può riassumere in questo modo.
    1)Crea i dati nel database impostando UTF-8.
    2)Nella connessione al database assicurati che è in UTF-8 come nella guida di Alhazred (per motivi legacy, con PDO non funziona poiché eseguono una versione senza patch, non mi dilungo oltre) quindi usa mysqli dopo aver impostato la connessione usa anche SET NAMES (occorre verificare altri dettagli prendi esempio dal codice WordPress dal github online).
    3)PHP_INI_USER Entry can be set in user scripts (like with ini_set()) or in the Windows registry. Since PHP 5.3, entry can be set in .user.ini
    PHP_INI_PERDIR Entry can be set in php.ini, .htaccess, httpd.conf or .user.ini (since PHP 5.3)
    PHP_INI_SYSTEM Entry can be set in php.ini or httpd.conf
    PHP_INI_ALL Entry can be set anywhere
    Ti interessa la direttiva default-charset 'UTF-8' e altre direttive che lavorano con esse come ad esempio output_handler o zlib.output_handler e anche il vecchio comportamento di https://www.php.net/manual/en/mbstring.overload.php
    4)se possibile utilizza editore nella lista php https://www.php.net/manual/en/tutorial.firstpage.php
    5)Per la creazione o aggiornamento di pagine/file utilizza UTF-8 senza boom
    6)Assicurati che comunque il file con codice php sia chiuso ?> (motivo compatibilità codice legacy e in alcune circostanze).
    7)Assicurati che il browser non invi una codifica diversa, l'utente può sempre decidere se il browser deve usare una codifica arbitraria (in realtà solo per browser vecchi che permettevano tale impostazione).
    8)Alcune funzioni php lavorano con i dati, anche htmlspecialchars o htmlentities usa il terzo parametro $enconding esplicitamente per essere compatibile per qualsiasi versione di php però i caratteri ammessi variano da versione a versione php della propria tabella.
    Piccolo esempio.
    Codice PHP:
    if(ini_get('output_buffering')) {
    //php si prende del tempo e prima invierà gli headers e dopo mostra output
    echo 'Hello Words';
    }
    header('Content-Type: text/html; charset=utf-8'); // poiché è  attivo il buffer dovrebbe sovrascrivere il Content-Type
    //altrimenti usa TRUE implicito per il secondo parametro

    ?> 
    Ultima modifica di darbula; 16-03-2021 a 16:42

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2020
    Messaggi
    7
    Quote Originariamente inviata da darbula Visualizza il messaggio
    così si può riassumere in questo modo.
    ...]
    Grazie molte della risposta, davvero ricca e articolata.
    Qualcosa la capisco ed era già impostata così, altre cose me le devo andare a studiare perchè non le conosco.

    Nel frattempo mi è capitata una cosa ancora più strana e inspegabile:
    i dati che provengono dall'import del DB locale non visualizza correttamente le accentate,

    Invece se inserisco direttamente da remoto tramite la pagina php, non direttamente da MySql, allora le accentate sono valorizzate correttamente.

    http://www.bbcentroantico.com/phs/de...nte.php?id=194

    Invece le query sul MySqlAdmin di Aruba danno risultato opposto,
    questa è la query sulla riga che ho inserito manualmente da PHP, che viene visualizzata correttamente

    + Opzioni
    id ragione_sociale sede_legale_indirizzo sede_legale_citta sede_legale_provincia sede_legale_cap rappr_legale telefono cellulare telefono_altro fax p_iva codice_fiscale sito_internet email pec titolare data_nascita_titolare codice_univoco txt_note chk_invio_alert
    Modifica Copia Elimina 194 à èìòù à èìòù città : à èìòù à èìò

    Invece i dati importati dal DB locale hanno un comportamente al rovescio: sono visualizzati correttamente nella query ma poi in PHP non mi visualizza nulla, se rimuovo la funzione htmlspecialchars visualizza accenti strani. Mah?
    Questa è la query sulla riga importata:
    id ragione_sociale sede_legale_indirizzo sede_legale_citta sede_legale_provincia sede_legale_cap rappr_legale telefono cellulare telefono_altro fax p_iva codice_fiscale sito_internet email pec titolare data_nascita_titolare codice_univoco txt_note chk_invio_alert
    Modifica Copia Elimina 194 DA Localé:àèìòùteò DA Localé:àèìòùteò DA Localé:àèìòùteò DA Local
    Ultima modifica di eiasu; 16-03-2021 a 20:21

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    189
    Ciao scusa non è luogo per spiegare il comportamento da locale a remoto, nonché creare la pappa pronta del codice (poiché è necessario avviare la conversazione dalla base, sintassi i tipi primitivi etc, senza materiale è impossibile farlo , perdonami io non riesco a spiegarlo in poche righe.)
    Probabilmente è un problema di codice php legacy, cioè la connessione può solamente essere avviata con https://www.php.net/manual/en/mysqli.set-charset.php e poi query SET NAMES utf8 (indica anche altri fattori, cerca sul tuo motore di ricerca SET NAMES cosa significa). Ergo il punto 2 da me citato in precedenza.
    Per istruzioni su MysqlAdmin https://dev.mysql.com/doc/refman/8.0/en/mysqladmin.html default-charset e altro (option tramite file).
    Non utilizzare MysqlAdmin ma visualizza l'output con php.
    Il carattere à in esadecimale UTF-8 è C3A0 questa sequenza se letta in ISO-8859-1 significa à e non breaking space (carattere non stampabile) A0.
    La stringa in PHP è implementata come un array di byte e un numero intero che indica la lunghezza del buffer. Non ha informazioni su come quei byte si traducono in caratteri, lasciando il compito al programmatore. Non ci sono limitazioni sui valori di cui può essere composta la stringa; in particolare, i byte con valore 0("NUL byte") sono consentiti ovunque nella stringa (tuttavia, alcune funzioni, dette in questo manuale come non "binary safe", possono trasferire le stringhe a librerie che ignorano i dati dopo un NUL byte.)
    Codice PHP:
    $string 'citt' "\XC3\XA0";
    //Esiste anche la compatibilità da decimale  0 a 127 senza X
    //Se servito come documento html UTF-8
    var_dump($string); // città
    //in realtà è del semplice testo poiché non rispecchia il markup HTML ma bensì text/plain "txt"
    ?> 
    L'importante che il file salvato supporti US-ASCII
    Inoltre se la tabella interna (php) non trova corrispondenza della sequenza di byte (detto in altro modo: sequenza non valida) di htmlspecialchars restituisce una stringa vuota.
    In cima usa sempre, il punto 8 accenna l'uso implicito del terzo parametro $enconding per prevenire errori tra versioni php diverse (però comunque la tabella interna potrebbe ugualmente variare, bug).
    Codice PHP:
    error_reporting(-1);
    ini_set('display_startup_errors''1');
    ini_set('display_error''1'); 
    Ultima modifica di darbula; 17-03-2021 a 03:03

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    189
    Ciao scusa ho letto adesso il tuo sorgente, il file da te creato/generatore non inserisce il doctype come prima riga, probabilmente non è idoneo il tuo editore preferito invece usa uno dalla lista di php, il punto 4 c'è il link che a sua volta ti porta su Wikipedia.
    Ecco una versione più raffinata del precedente codice.
    Codice PHP:
    error_reporting(-1);
    ini_set('display_startup_errors''1');
    ini_set('display_error''1');
    $string 'citt' "\XC3\XA0";
    //Esiste anche la compatibilità da decimale  0 a 127 senza X
    //Se servito come documento html UTF-8
    var_dump(htmlentities($stringENT_COMPAT ENT_HTML401'UTF-8'));
    $string .= "\XFF";
    var_dump(htmlentities($stringENT_COMPAT ENT_HTML401'UTF-8')); 
    Se vuoi risolvere fai un passo per volta, usa (crea/aggiorna i dati solamente con php e ovviamente la libreria mysqli se ti devi interfacciare al database Mysql).
    Se fai molteplici cose difficilmente ne verrai a capo.

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2020
    Messaggi
    7
    Ok grazie tante, c'è molto da imparare, ok faccio un passo alla volta e uso il php per interrogare il db, come editor uso notepad++ che è già nella lista. Provai a configurare ide netbeans ma non ne sono stato capace.
    Mi studio con calma e pazienza il problema che, secondo me,
    deve essere nel import export del DB, perché i dati che inserisco in tabella da remoto tramite l'interfaccia php vengono visualizzati correttamente, mentre i dati importati dal db locale della stessa tabella non sono visualizzati bene.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.