Visualizzazione dei risultati da 1 a 7 su 7

Discussione: caratteri accentati

  1. #1

    caratteri accentati

    Ciao a tutti
    Non riesco a venirne a capo sui caratteri accentati.
    Sto estraendo una timestamp dal database e lo converto in stringa con strftime e strttotime:

    Codice PHP:
    setlocale(LC_TIME"ITA_ita""it_IT");$data_insert htmlspecialchars(strftime("%A %d %B %Y alle ore %H:%M:%S"strtotime($rec["DateInsert"]))); 
    ma non visualizza nulla se invece tolgo "htmlspecialchars" mi da questo:
    marted� 28 settembre 2021 alle ore 15:20:36

    con il solito punto interrogativo al posto del carattere accentato.
    Ho provato anche con htmlentities ma nulla anche qui non mi visualizza nulla

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    115
    ITA_ita può anche essere Latin 1 (ISO8859-1) invece di UTF-8 è buona norma inserire la codifica originale in funzione che lo richiedono come htmlspecialchars. Oltretutto da php 8 è cambiato il tipo predefinito del secondo parametro detto flags.
    Sopra ogni cosa guarda strftime su php 8.1 a 9 che sarà rimossa https://wiki.php.net/rfc/deprecations_php_8_1
    Giustamente il file, il database e tutto il resto dovrà avere quel tipo di encoding. Se è un carattere non valido htmlspecialchars può tornare null (o stringa vuota mi sembra da php 8).
    Il rombo viene visualizzato quando il testo è Latin 1 ma la pagina è visualizzata in UTF-8.
    Ultima modifica di darbula; 29-09-2021 a 15:52

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

  4. #4
    Quote Originariamente inviata da darbula Visualizza il messaggio
    ITA_ita può anche essere Latin 1 (ISO8859-1) invece di UTF-8 è buona norma inserire la codifica originale in funzione che lo richiedono come htmlspecialchars. Oltretutto da php 8 è cambiato il tipo predefinito del secondo parametro detto flags.
    Sopra ogni cosa guarda strftime su php 8.1 a 9 che sarà rimossa https://wiki.php.net/rfc/deprecations_php_8_1
    Giustamente il file, il database e tutto il resto dovrà avere quel tipo di encoding. Se è un carattere non valido htmlspecialchars può tornare null (o stringa vuota mi sembra da php 8).
    Il rombo viene visualizzato quando il testo è Latin 1 ma la pagina è visualizzata in UTF-8.

    ok per ora strftime mi funziona ancora, il database ha come encoding utf8_general_ci

  5. #5
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Leggi il post in evidenza sui caratteri strani.
    Quel post lo letto ed e tutto come dice il post ma ugualmente non va

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    115
    codice:
    //Output per il cliente
    header('Content-Type: text/html; charset=UTF-8');
    var_dump(htmlspecialchars('luned' . "\xC3\xAC", ENT_QUOTES | ENT_HTML401, 'UTF-8')); //Esadecimale ì UTF-8 C3 AC
    Per non perdere i tuoi capelli diffida dalla sintassi corta. Il rombo poiché non esiste ì ISO-8859-1 in UTF-8 (penso che la locale è impostata a ISO-8859-1 o forse strftime erroneamente usa ISO-8859-1).
    Ultima modifica di darbula; 29-09-2021 a 17:14

  7. #7
    OK dopo una lunga nottata di riflessione ho risolto con queste modifiche:


    codice:
    setlocale(LC_TIME, "ita", "it_IT.utf8");
    $data_insert = strftime("%A %d %B %Y alle ore %H:%M:%S", strtotime($rec["DateInsert"]));
    echo utf8_encode($data_insert);
    e sembri andare bene... uffffff

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 © 2021 vBulletin Solutions, Inc. All rights reserved.