Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Caratteri speciali irriconoscibili

    Buonasera, ho una difficoltà pazzesca...


    Di solito, con e senza editor di testi TINYMCE, aggiungo sempre questa variabile sulla query di INSERT/UPDATE del DB MySQL


    Codice PHP:

    htmlentities
    ($_REQUEST['campo_testo'], ENT_QUOTES'UTF-8'
    FUnziona benissimo, unica cosa che non va è che quando copio e incollo da un sito che hanno i caratteri strani e speciali, tipo questo carattere non lo riconosce bene, si trasforma in ?

    Cosa ho sbagliato o cosa va aggiustato o aggiunto su htmlentities?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    192
    Codice PHP:
    $str "\xFC"// ho scritto ü dal mio editor impostando UTF-8, ma l'esadecimale FC indica il medesimo carattere ma con codifica ISO-8859-1

    // Outputs an empty string
    var_dump(htmlentities($strENT_QUOTES ENT_HTML401"UTF-8"));
    $correct "\xC3\xBC";
    var_dump(str_replace('&''&'htmlentities($correctENT_QUOTES ENT_HTML401"UTF-8"))); //Output sorgente ü,  se visualizzato con mime type text/html e l'agente utente lo supporta si vedrà ü 
    Significa che il tuo browser sta usando ISO-8859-1 quando copi (da una pagina HTML ISO-8859-1), mentre conserva questo charset anche quando incolli in una pagina UTF-8.
    Ultima modifica di darbula; 06-11-2021 a 01:21

  3. #3
    Ah.....ho provato anche a mettere il tuo codice

    Codice PHP:

    htmlentities
    ($_REQUEST['titolo'], ENT_QUOTES ENT_HTML401"UTF-8"
    Non funziona....

    Ma per caso conosci TINYMCE?
    Io uso la versione 4

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    192
    (No non funziona) semmai sei tu a non usarlo nel modo corretto.
    $_REQUEST['titolo'] ($_REQUEST $_POST $_GET $_COOKIE usano urldecode internamente significa se invii ü come ISO-8859-1 %FC o UTF-8 %C3%BC la decodifica percentuale lo trasforma in ü) è solo una variabile è ignara della codifica. Non stai provando il mio codice ti sei limitato a riadattarlo (erroneamente).
    Sniffa il pacchetto http con Wireshark per vedere come passa effettivamente i dati.
    1) Il browser potrebbe erroneamente conservare la codifica originaria da dove copi il carattere.
    2) Giustamente la pagina del form HTML dovrà avere un header
    Codice PHP:
    header('Content-Type: text/html; charset=utf-8'); 
    questo distingue una pagina HTML con codifica utf-8 o comunque la codifica dovrà essere espressa in UTF-8 anche per un diverso mime type di HTML. Anche la pagina di destinazione dovrà essere espressa con header UTF-8.

    In sintesi fai la pagina di nome form.php
    Codice PHP:
    // http://www.miodominio.tld/form.php?titolo=%C3%BC se con ü direttamente non è conforme. Leggimi per favore per i dati va utilizzato la codifica percentuale sia che è GET o POST con enctype application/x-www-form-urlencoded o in sua assenza è il default o comunque anche per POST enctype multipart/form-data con nome e valore testuale di una form eccetto il file che non usa la codifica percentuale
    header('Content-Type: text/html; charset=utf-8');[
    var_dump(urlencode($_REQUEST['titolo'])); // Risultato atteso per ü di UTF-8 è %C3%BC 
    Ultima modifica di darbula; 06-11-2021 a 13:17

  5. #5
    Ciao buongiorno,
    non ho fatto di testa mia, ho seguito e fatto le prove con le tue indicazioni, funziona solo questo codice

    Codice PHP:

    if($_REQUEST['avvio'])
    {

    echo 
    htmlentities(urldecode($_REQUEST['titolo']), ENT_QUOTES"UTF-8");

    } else {

    echo
    "<form id=\"form1\" name=\"form1\" enctype=\"multipart/form-data\" method=\"post\" action=\"1.php?avvio=1\">

    <input type=\"text\" name=\"titolo\" id=\"titolo\">

    <input type=\"submit\" name=\"ps\" id=\"ps\" value=\"Avvia\">

    </form>"
    ;


    Mentre se aggiorna o inserisci nella tabella del database MYSQL, si autoconverte in "?"....potrebbe essere il problema del database? Ovvero sul campo CODIFICA CARATTERI?

    HO anche provato con:
    latin1_swedish_ci
    latin1_general_ci

    Potrebbe essere questo? Qual'è il migliore?

    Inoltre già c'è il codice

    Codice PHP:

    header
    ('Content-Type: text/html; charset=utf-8'); 
    e

    codice HTML:
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    192
    Dovrai usare UTF-8 ovunque, da dove crei il file "Converti in UTF8 senza BOM".
    "ANSI as UTF8" ed "UTF8 senza BOM" sono sinonimi.
    Abilitare la gestione degli errori.
    error_reporting(-1);
    Se il web server non parla la stessa codifica del database puoi fare ben poco. Anche se effettivamente potresti convertire ISO-8859-1 in UTF-8 ma se il database supporta nativamente UTF-8 è meglio partire da lì.
    Nuovamente mi dai questo output?
    Codice PHP:
    header('Content-Type: text/html; charset=utf-8');
    if(isset(
    $_REQUEST['titolo']) && is_string($_REQUEST['titolo']))
    var_dump(urlencode($_REQUEST['titolo']));
    else
    var_dump('$_REQUEST[\'titolo\'] non valido');
    error_reporting(-1); 
    Qui si parla di UTF-8 https://forum.html.it/forum/showthre...readid=2901187
    Ultima modifica di darbula; 06-11-2021 a 16:58

  7. #7
    Ciao, funziona e tira così fuori

    codice HTML:
    string(15) "Wertm%C3%BCller"
    Però ho provato a cambiare sul database MYSQL, codifica caratteri in "utf8_unicode_ci", ora funziona....strano....

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