TextEncode

Se ritieni utile questo articolo, considera la possibilità di effettuare una donazione (il cui importo è a tua completa discrezione) tramite PayPal. Grazie.

Spesso ci si trova a dover inserire nelle pagine Web del testo proveniente da documenti di testo (file di Word, email, ecc.) e ci si deve scontrare con l'inserimento di "caratteri particolari": lettere accentate, blocchi di codice o... caratteri giapponesi che siano! Per visualizzare correttamente la nostra pagina HTML possiamo:

  • utilizzare un buon editor, che effettui automaticamente l'escape dei caratteri (no, il notepad purtroppo non lo fa)

  • impostare nella pagina la tabella codici corretta (ad esempio definendo charset=iso-8859-1 per i caratteri latini, ma spesso non è sufficiente per gestire tutti i caratteri richiesti da una pagina)

  • avere buona memoria (e tanta pazienza) e sostituire manualmente i caratteri che non vengono visualizzati correttamente (non è il mio caso: al più riesco a ricordare 3 o 4 entità... ""&gt;" per ">", "&lt;" per "<" e "&amp;" per "&"...)

  • utilizzare un'applicazione che faccia il lavoro al posto nostro, ovvero: l'obiettivo di questo articolo!

Il layout

La nostra applicazione non sarà altro che una semplice pagina ASP.NET che presenterà una casella di testo (textarea) in cui incollera il testo da "encodare" ed un pulsante per richiamare il codice ed ottenere il testo da inserire nella pagina HTML. Aggiungeremo poi alcune opzioni per poter controllare ulteriormente il risultato della codifica (ad esempio per definire come trattare i ritorni a capo o i caratteri di spaziatura e tabulazione).
In definitiva i controlli da inserire nella pagina sono:

  • Una Textarea per inserire il testo originale (SourceText)

  • Una Textarea che conterrà il risultato dell'operazione di encode (EncodedText)

  • Una DropDownList per definire la modalità di gestione dei ritorni a capo (EndLineReplaceMode)

  • Una DropDownList per definire la modalità di gestione dei caratteri di tabulazione (TabReplaceSpaceNumber)

  • Una CheckBox per definire se utilizzare l'entità "&nbsp;" nella sostituzione dei caratteri di tabulazione (TabEscapeSpaces)

  • Una CheckBox per definire se sostituire i caratteri di spaziatura con l'entità "&nbsp;" (EscapeSpaces)

  • Un Button per l'invio del form e l'esecuzione dell'escaping (StartEncode)

I suddetti controlli, per comodità, avranno l'attributo runat="server".

Il codice della pagina ASP.NET

Poiché, dato l'obiettivo della pagina stessa, sarà ammesso l'invio di codice HTML, aggiungiamo alle direttive di pagina la disabilitazione della validazione della Request:

<%@ Page Language="C#" ValidateRequest="false"%>

Inseriamo nel corpo (BODY) della pagina il form con i controlli richiesti:

<form id="frmTextEncode" runat="server" method="post">
    
    <textarea id="SourceText" runat="server" cols="50" rows="10"></textarea>
    <textarea id="EncodedText" runat="server" cols="50" rows="10"></textarea>
    
    <label for="EndLineReplaceMode">Fine riga e ritorno a capo:</label>
    <select id="EndLineReplaceMode" runat="server">
        <option value="text">Non sostituire</option>
        <option value="html">Sostituisci con &lt;br&gt;</option>
        <option value="xml">Sostituisci con &lt;br /&gt;</option>
    </select>
    <br /><br />
    
    <label for="TabReplaceSpaceNumber">Caratteri di tabulazione:</label>
    <select id="TabReplaceSpaceNumber" runat="server">
        <option value="0">Non sostituire</option>
        <option value="1">Sostituisci con 1 spazio</option>
        <option value="2">Sostituisci con 2 spazi</option>
        <option value="3">Sostituisci con 3 spazi</option>
        <option value="4">Sostituisci con 4 spazi</option>
        <option value="5">Sostituisci con 5 spazi</option>
        <option value="6">Sostituisci con 6 spazi</option>
        <option value="7">Sostituisci con 7 spazi</option>
        <option value="8">Sostituisci con 8 spazi</option>
    </select>
    <input type="checkbox" id="TabEscapeSpaces" value="1" runat="server" checked="true" /><label for="TabEscapeSpace">utilizza "&nbsp;" come carattere di spaziatura</label>
    <br /><br />
    
    <input type="checkbox" id="EscapeSpaces" value="1" runat="server" /><label for="EscapeSpace">Sostituisci i caratteri di spaziatura con "&nbsp;"</label>
    <br /><br />
    
    <asp:Button ID="StartEncode" runat="server" OnClick="StartEncode_Click" Text="Invia" />
    
</form>

Aggiungiamo un blocco di script server-side in cui inserire il codice da eseguire al click del pulsante:

<script runat="server">
protected void StartEncode_Click(object sender, EventArgs e)
{

}
</script>

Come prima cosa recuperiamo il testo per cui è richiesto l'encoding:

string t = this.SourceText.Value;

La gestione dei caratteri per cui risulta necessario l'encode è affidata al metodo HtmlEncode della classe System.Web.HttpUtility del .NET Framework; insomma: il più è fatto pressoché... gratis!

t = System.Web.HttpUtility.HtmlEncode(t);

A noi non resta che gestire le sostituzioni rimanenti, relative ai ritorni a capo, ai caratteri di tabulazione e a quelli di spaziatura.
Iniziamo verificando la richiesta di sostituzione degli spazi con la relativa entità HTML:

if(this.EscapeSpaces.Checked)
    t = t.Replace(" ", "&nbsp;");

Quindi verifichiamo la modalità selezionata per la gestione dei ritorni a capo (HTML o XML) e, eventualmente, procediamo alla sostituzione:

switch (this.EndLineReplaceMode.Value)
{
    case "text":
        // no replace
        break;
    case "html":
        t = t.Replace("\r\n", "<br>\r\n");
        break;
    case "xml":
        t = t.Replace("\r\n", "<br />\r\n");
        break;
}

Allo stesso modo sostituiamo i caratteri di tabulazione con il formato selezionato (n spazi o n entità &nbsp;):

string s = "";
string sc = (this.TabEscapeSpaces.Checked) ? "&nbsp;" : "";
int sn = System.Convert.ToInt32(this.TabReplaceSpaceNumber.Value);
for(int i = 0; i < sn; i++)
    s += sc;
if(sn > 0)
    t = t.Replace("\t", s);

Per finire impostiamo il testo nella Textarea di output:

this.EncodedText.Value = t;

Conslusioni

Per avere sempre a portata di... mouse questa comoda utility potete aggiungere ai vostri bookmarks la pagina dimostrativa disponibile on-line.