Visualizzazione risultati 1 fino 4 di 4

Discussione: html_entity_decode() ed espressioni regolari

  1. #1
    Guest

    Predefinito html_entity_decode() ed espressioni regolari

    Salve a tutti, ho bisogno di un piccolo aiuto...
    situazione: testo preso da database che ha "subito" una htmlentities().
    scopo: far passare da una html_entity_decode() solo le parti di testo contenute tra tag in stile VBcode [decode][/decode]...

    la mia idea era questa:
    Codice PHP:
    eregi("\[decode\](+.)\[/decode\]", $stringa, $regs);
    foreach(
    $regs as $value){
    $stringa = ereg_replace($value,html_entity_decode($value),$stringa);
    }
    ma non produce alcun risultato, nemmeno errori... come se non la scrivessi nemmeno...
    tra l'altro, a pensarci ora, se ce ne sono più di uno c'è il rischio che parta dal primo e finisca all'ultimo...

    vabbè, se saprete darmi una mano ve ne sarò grato

    ciao.

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Tutte le funzioni ereg(i) sono ormai deprecate. Usa le PCRE

    Codice PHP:
    preg_match_all('/\[decode\](.+?)\[\/decode\]/', $stringa, $m);
    $search = $m[0]; // contiene l'array di tutti i match [decode][/decode]
    $text = $m[1]; // contiene l'array di tutti i testi all'interno di [decode]
    $l = count($search);

    for(
    $i = 0; $i < $l; $i++) {
    $stringa = str_replace($search[$i], html_entity_decode($text[$i]), $stringa);
    }

    echo
    $stringa;
    Ma se vuoi una soluzione più semplice, basta usare preg_replace:
    Codice PHP:
    $decode = preg_replace('/\[decode\](.+?)\[\/decode\]/e', 'html_entity_decode("\\1")', $stringa);

    echo
    $decode;

  3. #3
    Guest

    Predefinito

    grande! grazie. ma c'è una preferenza sulle due o sono esattamente equivalenti?
    un altra cosa... se il codice è su più linee non me lo prende... è per la questione che le funzione si blocca al \n e, se non sbaglio, dovrei cambiare le impostazioni di php? (che comunque basta scrive il codice tutto su una riga...)

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Penso siano equivalenti.
    Comunque, per il problema dei ritorni a capo, aggiungi il modificatore s.

    Codice PHP:
    preg_replace('/\[decode\](.+?)\[\/decode\]/eis', 'html_entity_decode("\\1")', $stringa);
    Ho aggiunto anche i, così l'espressione è case insensitive.

Regole di scrittura

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