Visualizzazione risultati 1 fino 12 di 12

Discussione: [PHP] Spezzare le parole troppo lunghe

  1. #1
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito [PHP] Spezzare le parole troppo lunghe

    Ho un forum creato da me e a volte capita che magari qualcuno scrive delle parole molto lunghe e che quindi mi sforma tutto il layout. Con la funzione wordwrap si possono spezzare le stringhe a un certo carattere. Questa funzione non tiene conto degli spazi e quindi ogni stringa la considera una parola unica. Per ovviare a questo problema uso la funzione explode e così ho risolto parte del problema.
    Il problema è che vengono spezzati magari anche gli indirizzi di immagini e link rovinando la loro visualizzazione. Mi servirebbe un metodo per fare in modo che tutti gli elementi dentro a tag HTML non vengano divisi, mentre gli altri sì.
    Spero di essermi spiegato bene...
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  2. #2
    Guest

    Predefinito

    uhmm...è un po' difficile...potresti creare delle espressioni regolari che trovati tutti i tag html e li inseriscano in una array($array) e li sostituiscano, all'interno della stringa, con \$array[$key] (il \ all'inzio non è un errore di battitura tuttavia potrebbe non servirti[dipende se usi apici o virgolette]..se non funge toglilo),
    alla striga così ottenuta applichi wordwrap tranquillamente e poi passi il risultato ad eval() in questo modo:
    eval("\$str = \"$str\";");
    per adesso sistemi migliori non me ne vengono in mente...

    ps
    due a zerooooooooooooooooooooooooooooooo
    Ultima modifica di SoulHome : 22-06-2006 alle ore 17.53.48

  3. #3
    Ospite Guest

  4. #4
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Citazione Originalmente inviato da SoulHome
    uhmm...è un po' difficile...potresti creare delle espressioni regolari che trovati tutti i tag html e li inseriscano in una array($array) e li sostituiscano, all'interno della stringa, con \$array[$key] (il \ all'inzio non è un errore di battitura tuttavia potrebbe non servirti[dipende se usi apici o virgolette]..se non funge toglilo),
    alla striga così ottenuta applichi wordwrap tranquillamente e poi passi il risultato ad eval() in questo modo:
    eval("\$str = \"$str\";");
    per adesso sistemi migliori non me ne vengono in mente...
    Di espressioni regolari non ne capisco molto e la tua spiegazione non l'ho molto capita.

    Citazione Originalmente inviato da farlimas
    Questa discussione l'avevo già trovata, ma purtroppo non fa quello che voglio io. Cioè non fa differenza tra codice HTML e parole normali.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  5. #5
    Guest

    Predefinito

    potresti localizzare i tag di apertura e di chiusura all'interno del testo.
    Se la funzione expode ritorna un valore nel mezzo si ignora, altrimenti va bene

  6. #6
    Guest

    Predefinito

    io intendevo questo:
    1) con un espressione regolare ti trovi tutte le porzioni di strnga racchiuse dentro < >
    2) le inserisci in un array
    3) al loro posto nel messaggio originario ci metti un simbolo strano (magari un carattere non stamapabile ottenuto con la funzione chr()) che sicuramente non sarà presente nel testo
    4) dividi la stringa con wordwrap
    5) sostituisci tutti i caretteri strani di prima con i valori dell'array

    (non è la stessa cs che avevo postato priam...ma forse è più smeplice ed efficace)

  7. #7
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da SoulHome
    ...
    3) al loro posto nel messaggio originario ci metti un simbolo strano (magari un carattere non stamapabile ottenuto con la funzione chr()) che sicuramente non sarà presente nel testo
    ...
    Purtroppo questo passaggio non è molto fattibile... se proprio non sei capace di scegliere un carattere?

    Se volessi una cosa veramente "a prova di bomba" (la cui unica assunzione è quella di avere un messaggio in HTML corretto) ti converrebbe implementare quello che si chiama automa a stati finiti: spiegato in poche righe, esamini il messaggio carattere per carattere, non appena trovi il carattere "<" entri in uno "stato protetto", nel quale non potrai inserire altri spazi e dal quale uscirai trovato il carattere ">". Hai altri due stati "non protetti": nel primo effettui il reset di un contatore quando nel file trovi un carattere di spazio, nell'altro incrementi questo contatore, quando trovi qualsiasi altro carattere. In quest'ultimo stato dovrai provvedere ad inserire uno spazio e azzerare il conteggio quando la situazione diventa critica, ovvero quando il contatore supera il limite che hai stabilito.

    Lo so, sarebbe stato molto meglio con qualche riga di codice... ma sto scrivendo ben oltre la pausa pranzo...

    Statemi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  8. #8
    Guest

    Predefinito

    bhè...non è che non sia fattibile...quante probabilità ci sono che un utente invii un messaggio con all'interno STX? a meno che non lo faccia apposta digitando una combinazione di tasti...ma perchè dovrebbe farlo?l'unica cosa che otterebbe sarebbero i link sfalsati nel suo messaggio...comunque anche la tua soluzione mi piace...vediamo cosa preferisce...

  9. #9
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Nella soluzione di SoulHome non ho capito il punto 3.
    Ho provato quella di DementialSite e naturalmente mi funziona.
    Nella vecchia discussione linkata qualche messaggio fa si parla di utilizzare questa stringa di codice:
    Codice PHP:
    $testo=ereg_replace("([^ ]{50})","\\1 ",$testo);
    Sto provando a modificarla tentando di fargli capire che non deve spezzare le parole all'interno dei tag HTML. E' una cosa possibile o sto impazzendo per niente?
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  10. #10
    Guest

    Predefinito

    prova così:
    Codice PHP:
    $testo=ereg_replace("([^ [^<(.*?)>]]{50})","\\1 ",$testo);

  11. #11
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da funcool
    ... Ho provato quella di DementialSite e naturalmente mi funziona. ...
    Ehi, allora non ero stato troppo criptico... comunque fammi un fischio se pensi che serva un po' di codice...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  12. #12
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Ho modificato il codice di Jostock in questo modo perché prima non mi funzionava:
    Codice PHP:
    $testo=ereg_replace("([^ ][^<(.*?)>]{50})","\\1 ",$testo);
    Sembrano non esserci problemi con il testo, purtroppo non ho avuto tempo di controllare le immagini. Sintatticamente è corretto?
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •