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

    Html entities e caratteri particolari

    Salve a tutti,
    ho un problema con la decodifica degli html entities:
    In un sito che ho fatto è presente una form di iscrizione, in questa form si iscrivono agenzie di viaggio, la maggior parte delle quali sono di paesi dell'est, polonia, cecoslovacchia ecc.., quindi i nomi possono contenere molti caratteri particolari.

    Nel database vengono salvati in formato html entities (es. &#345 al posto di ř ), qusto va benissimo perchè visualizzando i dati su una pagina web i caratteri appaiono correttamente.

    Il problema si pone quando devo fare un'esportazione degli stessi dati su un file di testo. Ho provato con html_entities_decode() ma non li decodifica, allora ho trovato tutta la tabella di conversione e ho fatto una funzione che faccia uno str_replace() uno ad uno:


    $text = str_replace('&#345', 'ř', $text);


    ma anche così facendo non viene visualizzato il carattere corretto...

    Qualcuno ha già risolto questo problema.

    Grazie a tutti.
    Ciao

  2. #2
    scusa mi spieghi per quale motivo devi convertire ('&#345' in 'ř')?

    Forse devi fare l'inverso?

  3. #3
    Ciao,
    nel database il carattere viene salvato codificato (es. &#345), per visualizzarlo su pagine html va benissimo. Ma io devo esportare questi dati un un file di testo e quindi devo convertire tutte le entita HTML nel carattere originario (es. ř)

    Ciao

  4. #4
    quando fai la seguente operazione:
    $text = str_replace('&#345', 'ř', $text);


    lo converte in "?" oppure non lo converte proprio?

  5. #5
    Nel caso specifico del carattere di esempio lo visualizza come Å™ ....

  6. #6
    il problema è che "ř" fa parte dei caratteri UNICODE, nel momento in cui vai a salvarlo in un file di testo automaticamente lo convertite in caratteri ANSI, quindi non viene riconosciuto e perciò ti da quel errore.

    Scusa nn sarebbe più logico salvare l'entità(&#345) piuttosto che il carattere decodicato(ř) nel file di testo?

  7. #7
    Purtroppo il cliente ha bisogno di quei dati per utilizzarli in applicazioni non web, e quindi nell'esportazione devo darli i caratteri originari...

  8. #8
    allora devi salvarlo su un file di testo in formato unicode.

    Prova a vedere sulla guida di php.net.
    Come si fa tale conversione..

    oppure asp qualcuno che legga questo post ed è a conoscenza di questo evento...

  9. #9
    Ti consiglierei di cambiare drasticamente approccio per non complicarti la vita. Prima di tutto, usa UTF-8 nelle tue pagine e imposta charset e collation del database rispettivamente in utf8 e utf8_general_ci. Quando salvi i record, NON convertire i caratteri speciali. E' sufficiente che, quando le pagine leggono i dati, usino htmlspecialchars() con il secondo argomento impostato su ENT_NOQUOTES, in modo da convertire solo i caratteri \, &, < e >. Ricorda che per usare UTF-8 in una pagina PHP o HTML che sia, non basta dichiarare il charset tramite tag <meta />, ma devi anche salvare il file usando la codifica UTF-8. Ho anche io lo stesso problema con l'area amministrativa del mio sito a causa delle lettere accentate e ho seguito questa strada, evitandomi tanti casini. UTF-8 è caldamente consigliato se hai testi che contengono caratteri di altre lingue. Anche chi fa siti solo in inglese è agevolato (gli basterebbe usare l'ASCII o al limite l'ISO-8859-1), perché se deve usare caratteri particolari non presenti in inglese, può farlo senza ricorrere alle entità di carattere e senza problemi di posizione dei caratteri nella tabella codici utilizzata. Ricapitolando:

    1. Nelle tue pagine imposta il meta tag che specifica il charset in modo che usi UTF-8.
    2. Quando crei o salvi le pagine, assicurati che il tuo editor usi la codifica UTF-8 (molti salvano automaticamente in ASCII, altri in Windows-1252...è raro che un editor sia impostato di default per salvare in UTF-8). Se usi Crimson Editor o PSPad, puoi controllare facilmente che codifica viene utilizzata e modificarla.
    3. Imposta il database e le sue tabelle con charset utf8 e collation utf8_general_ci.
    4. Non convertire le stringhe che vengono inserite nel database: inseriscile così come sono.
    5. Nelle pagine che leggono e visualizzano i dati, usa htmlspecialchars($stringa,ENT_NOQUOTES) per convertire solo i caratteri che ne hanno bisogno (\, &, < e >) e non gli altri.

    I documenti così restano pienamente validi a livello di codice, usano meno byte per rappresentare i caratteri particolari e sono "universali".


  10. #10
    Vi ringrazio tutti per i preziosi suggerimenti ora deciderò che strada intraprendere

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.