Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it L'avatar di MM88
    Registrato dal
    Jun 2003
    Messaggi
    567

    usare file .TXT formattato con fopen()

    Ciao a tutti. Se utilizzo la funzione fopen() per leggere un file .txt, come posso formattare il testo in modo da avere ritorni di carrello, grassetto, corsivi, ecc.?

    Posso aggiungere una funzione a quella di fopen() per aprire un file .rtf e avere tutto già formattato?


    grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: usare file .TXT formattato con fopen()

    Originariamente inviato da MM88
    Ciao a tutti. Se utilizzo la funzione fopen() per leggere un file .txt, come posso formattare il testo in modo da avere ritorni di carrello, grassetto, corsivi, ecc.?
    Guarda che la fopen serve solo per aprire uno stream relativo ad un file. Poi il file lo devi leggere con fread, fgets, ecc...
    Visto che il file è "di testo", ti consiglio di usare fgets. Così leggi riga x riga.

    Poi cosa intendi con: in modo da avere ritorni di carrello, grassetto, corsivi, ecc.???
    Innanzitutto un file di testo puro non ha informazioni su grassetto, corsivo, ecc...!!!!
    Vuoi scrivere il contenuto del file di testo nella pagina web?? Bene, per ogni riga usa la funzione htmlspecialchars per convertire i caratteri con significato "speciale" in HTML e poi "butta" fuori la linea convertita, seguita da un "
    \r\n".

    Originariamente inviato da MM88
    Posso aggiungere una funzione a quella di fopen() per aprire un file .rtf e avere tutto già formattato?
    Guarda che un file in formato .rtf è molto complesso. Se vuoi scrivere nella pagina web il codice RTF, è un conto. Se invece vuoi scrivere nella pagina il testo formattato secondo quanto specificato nel RTF ... beh, è molto più complicato. Dovresti interpretare il codice RTF. Non mi risulta che ci sia qualcosa di già fatto tra le funzioni "standard" del PHP.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di MM88
    Registrato dal
    Jun 2003
    Messaggi
    567
    Ciao, grazie per la risposta.

    1) se utilizzo la funzione fread() in questo modo, mi legge regolarmente il file:

    codice:
    $contents = fread($handle, filesize($filename));
    se uso invece fgets, la pagina mi rimane vuota, non succede nulla:

    codice:
    $contents = fgets($handle, 4096);
    Quindi, vorrei che leggesse ogni singola riga, ma fgets non va e con fread() legge tutto di botto e mi riporta tutto senza ritorno a capo.


    2) Sì , voglio riportare il contenuto del testo puro all'interno della pagina web. So benissimo che non ha formattazioni, quindi come faccio ad inserire questi elementi?

    Non ho capito come si usa htmlspecialchars, potresti farmi un esempio?

    grazie

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da MM88
    1) se utilizzo la funzione fread() in questo modo, mi legge regolarmente il file:

    codice:
    $contents = fread($handle, filesize($filename));
    Certo! Ma così metti in $contents l'intero contenuto del file!!!

    Originariamente inviato da MM88
    se uso invece fgets, la pagina mi rimane vuota, non succede nulla:

    codice:
    $contents = fgets($handle, 4096);
    Ma ... ovvio!! fgets legge 1 sola riga. Devi fare la lettura in un loop!!!

    Originariamente inviato da MM88
    Quindi, vorrei che leggesse ogni singola riga, ma fgets non va e con fread() legge tutto di botto e mi riporta tutto senza ritorno a capo.
    Tu lo conosci HTML??? Lo sai che in HTML gli spazi e i newline non sono significativi e che per avere un "vero" ritorno a capo devi mettere
    ???

    Bene, un testo:
    ciao prova
    su diverse
    linee


    lo devi "buttare" fuori sulla pagina così:
    ciao prova

    su diverse

    linee


    Per la questione degli spazi, bisogna vedere se il testo contiene più spazi contigui. In questo caso ci sono diverse opzioni: convertire tutti gli spazi in &nbsp; oppure mettere tutto il testo dentro il tag <pre> (e in questo caso non hai più bisogno di mettere
    ).

    Originariamente inviato da MM88
    2) Sì , voglio riportare il contenuto del testo puro all'interno della pagina web. So benissimo che non ha formattazioni, quindi come faccio ad inserire questi elementi?
    In che senso??? Se non ha informazioni sulla formattazioni (es. grassetto) ecc..., come pensi di mettercele???

    Originariamente inviato da MM88
    Non ho capito come si usa htmlspecialchars, potresti farmi un esempio?
    codice:
    $testo = "Prova <Ciao>";
    
    $testo = htmlspecialchars ($testo, ENT_QUOTES);
    Ora $testo contiene "Prova &lt;Ciao&gt;"
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di MM88
    Registrato dal
    Jun 2003
    Messaggi
    567
    1)

    Ma ... ovvio!! fgets legge 1 sola riga. Devi fare la lettura in un loop!!!
    mi puoi gentilmente dire come inserire quindi la funzione fgets() e modificare la funzione sottostante per ottenere la lettura di ogni singola riga e fare un
    alla fine di ogni riga?

    codice:
    <?php
    $filename = "test.txt";
    $filename = 'test.txt';
    $handle = fopen($filename, "r");
    $contents = fread($handle, filesize($filename));
    fclose($handle);
    echo $contents;
    ?>

    2)

    Conosco l'html, ma non capisco come si possa assegnare del grassetto o del corsivo ad un testo puro che estraggo in loop. Come faccio a dirgli precisamente cosa mettere in grassetto o in corsivo?


    grazie

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da MM88
    mi puoi gentilmente dire come inserire quindi la funzione fgets() e modificare la funzione sottostante per ottenere la lettura di ogni singola riga e fare un
    alla fine di ogni riga?
    Ecco:
    codice:
    $filename = "...nome del file...";
    
    if (($handle = fopen ($filename, "r")) !== FALSE)
    {
        while (($linea = fgets ($handle, 4096)) !== FALSE)
        {
            $linea = rtrim ($linea, "\r\n");
            $linea = htmlspecialchars ($linea, ENT_QUOTES);
    
            echo $linea . "
    \r\n";
        }
    
        fclose ($handle);
    }
    Originariamente inviato da MM88
    2)

    Conosco l'html, ma non capisco come si possa assegnare del grassetto o del corsivo ad un testo puro che estraggo in loop. Come faccio a dirgli precisamente cosa mettere in grassetto o in corsivo?
    Scusa eh ... ma

    Se hai un file di testo che contiene la frase:

    Ciao, questa è una frase di testo senza formattazione

    come cavolo fai e con quale criterio potresti stabilire cosa mettere in grassetto, corsivo, ecc... e cosa no????
    Cioè non è che te lo puoi inventare ... o almeno, certo, puoi inventarti che ad esempio le parole che iniziano con la 'f' vanno poi messe in grassetto. Ma a che cavolo ti serve???
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di MM88
    Registrato dal
    Jun 2003
    Messaggi
    567
    Originariamente inviato da andbin
    Ecco:
    codice:
    $filename = "...nome del file...";
    
    if (($handle = fopen ($filename, "r")) !== FALSE)
    {
        while (($linea = fgets ($handle, 4096)) !== FALSE)
        {
            $linea = rtrim ($linea, "\r\n");
            $linea = htmlspecialchars ($linea, ENT_QUOTES);
    
            echo $linea . "
    \r\n";
        }
    
        fclose ($handle);
    }

    Ti ringrazio ancora per la tua pazienza, funziona benissimo.

    Due sole cose: 1) le lettere accentate non vengono comprensibilmente codificate.

    2) la riga rompe la formattazione della tabella in cui la routine è inserita. Se la tabella è 400px, la riga del testo che viene prelevata e scritta mi allarga e deforma la tabella. Come faccio a fargli rispettare le dimensioni della stessa?



    Scusa eh ... ma

    Se hai un file di testo che contiene la frase:

    Ciao, questa è una frase di testo senza formattazione

    come cavolo fai e con quale criterio potresti stabilire cosa mettere in grassetto, corsivo, ecc... e cosa no????
    Cioè non è che te lo puoi inventare ... o almeno, certo, puoi inventarti che ad esempio le parole che iniziano con la 'f' vanno poi messe in grassetto. Ma a che cavolo ti serve???

    Ti spiego, mi servirebbe che le parole scitte in maiuscolo nel testo, appaiano in grassetto.
    Tutto qua.


    grazie ancora!

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da MM88
    1) le lettere accentate non vengono comprensibilmente codificate.
    Le lettere accentate (e in generale i caratteri speciali) sono ancora una questione a parte. Tu vuoi avere nel codice HTML l'entità relativa ad un carattere speciale (es. &egrave oppure proprio il carattere stesso???

    Tieni presente che le entità le puoi mettere sempre e in qualunque caso senza problemi. Il carattere speciale lo puoi anche mettere direttamente ma il browser deve essere avvertito del set di caratteri utilizzato. Si mette nel <head> ad es.:

    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

    Ovviamente il carattere deve essere codificato secondo quello specifico charset!!

    Originariamente inviato da MM88
    2) la riga rompe la formattazione della tabella in cui la routine è inserita. Se la tabella è 400px, la riga del testo che viene prelevata e scritta mi allarga e deforma la tabella. Come faccio a fargli rispettare le dimensioni della stessa?
    Questo è strano. Se la cella ha il width "forzato" (per esempio da CSS: width: 400px;), il testo dovrebbe in teoria "fluire" lungo la cella.


    Originariamente inviato da MM88
    Ti spiego, mi servirebbe che le parole scitte in maiuscolo nel testo, appaiano in grassetto.
    Ah oh !!!! Finalmente specifichi con quale criterio formattare il testo!

    Quindi ad esempio:

    Ciao, prova Testo

    lo devi far diventare:

    Ciao, prova Testo

    Per farlo è sicuramente possibile. Prima di fare la htmlspecialchars, bisognerebbe "spezzare" la stringa per cercare al suo interno le parole che hanno il maiuscolo e quindi inserire il tag [b].
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it L'avatar di MM88
    Registrato dal
    Jun 2003
    Messaggi
    567
    Originariamente inviato da andbin
    Le lettere accentate (e in generale i caratteri speciali) sono ancora una questione a parte. Tu vuoi avere nel codice HTML l'entità relativa ad un carattere speciale (es. &egrave oppure proprio il carattere stesso???

    le meta-informazioni nell'HEAD ci sono. Ritengo che convenga trasformre la 'e' accentata del testo pure in carattere speciale per non avere problemi con l'HTML, giusto?

    Come va modificata la routine per specificare questo?
    Va usata qualche funzione strng?



    Ah oh !!!! Finalmente specifichi con quale criterio formattare il testo!

    Quindi ad esempio:

    Ciao, prova Testo

    lo devi far diventare:

    Ciao, prova Testo

    Per farlo è sicuramente possibile. Prima di fare la htmlspecialchars, bisognerebbe "spezzare" la stringa per cercare al suo interno le parole che hanno il maiuscolo e quindi inserire il tag [b].

    tipo:

    CIAO, prova TESTO


    mi servirebbe che le parole interamente maiuscole fossero poste all'interno dei tag .


    Con la stessa logica potrei poi individurare i link presenti nel testo (http://...) e creare dei link.



    GRAZIE ANCORA PER IL TUO AIUTO.

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da MM88
    le meta-informazioni nell'HEAD ci sono. Ritengo che convenga trasformre la 'e' accentata del testo pure in carattere speciale per non avere problemi con l'HTML, giusto?
    Beh, dipende. Se fai tutto con 1 unico set di caratteri, non dovresti avere problemi.
    Cioè se nella pagina specifichi iso-8859-1 e il tuo file di testo che apri dal PHP è anche lui codificato in iso-8859-1, puoi mettere direttamente il carattere.

    Originariamente inviato da MM88
    Come va modificata la routine per specificare questo?
    Va usata qualche funzione strng?
    C'è un'altra funzione: htmlentities
    È quasi uguale alla htmlspecialchars ma con la differenza che qualunque carattere che ha una entità equivalente, viene convertito.
    Esempio: à ---> &agrave;

    Nota che gli puoi anche passare il nome di un charset (per default è iso-8859-1).

    Originariamente inviato da MM88
    tipo:

    CIAO, prova TESTO


    mi servirebbe che le parole interamente maiuscole fossero poste all'interno dei tag .


    Con la stessa logica potrei poi individurare i link presenti nel testo (http://...) e creare dei link.
    Ok, quindi proprio tutta la parola maiuscola. Fai qualche ricerca nel manuale del PHP, adesso non avrei idea.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.