Editare HTML in una textarea
Spesso può servire, specialmente se si sta scrivendo un CMS, utilizzare una textarea per l’editing del codice HTML. Purtroppo symfony, a ogni submit di un form, converte il contenuto della textarea stessa trasformando le entità HTML nei rispettivi simboli (c’è anche un ticket aperto a riguardo). Questo fastidioso comportamento fa sì che le pagine HTML create in tal modo non siano più validate, perché tutti i vostri “&” diventeranno inesorabilmente “&”.
Per ovviare a questo inconveniente, nell’attesa che il ticket sia chiuso, si può usare questo escamotage. Creare una classe, per esempio /lib/fixAmp.class.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php class fixAmp { /** * fix ampersands in HTML strings * @param string $txt * @return string */ public static function fixAmps($txt) { $txt = mb_eregi_replace('&(?!amp;)', '&', $txt); $txt = mb_eregi_replace('&#(\d+);', '&#\1;', $txt); // for numeric entities $txt = mb_eregi_replace('&(\w+);', '&\1;', $txt); // for literal entities $txt = mb_eregi_replace('&&', '&&', $txt); // for php boolean control return $txt; } } ?> |
Quindi nella action basterà applicare il metodo al testo ottenuto dalla textarea.
Ad esempio
1 | $myClass->setContent(fixAmps::fixAmps($this->getRequestParameter('content'))); |
La classe vista sopra utilizza mb_eregi_replace() per poter funzionare con i caratteri multi-byte, ma si può facilmente modificare per l’utilizzo con preg_replace()










[...] Editare HTML in una textarea [...]