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;(?!amp;)', '&amp;', $txt);
    $txt = mb_eregi_replace('&amp;#(\d+);', '&#\1;', $txt);  // for numeric entities
    $txt = mb_eregi_replace('&amp;(\w+);', '&\1;', $txt);  // for literal entities
    $txt = mb_eregi_replace('&amp;&amp;', '&&', $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()

One Reply to “Editare HTML in una textarea”

Leave a Reply

Your email address will not be published. Required fields are marked *