2009-03-04 6 views
5

Ho un'area di testo in un'applicazione ASP.NET MVC in cui l'utente può digitare del testo. Quando mostro il testo all'utente, utilizzo Html.Encode per impedire l'input dannoso. Il problema è che l'utente può digitare in spagnolo e forse digita año e lo Encode lo trasforma in a&#241o. Come posso evitare questo?Quando si codifica l'input HTML per sicurezza, come evitare di codificare caratteri internazionali come Ñ o ñ?

EDIT: Nel codice HTML generato, vedo questo:

<a href="a1-'a1'-Cama&amp;#241;o?sort=estadisticas#241;o">a1 'a1' Cama&amp;#241;o</a> 

Più tardi nella pagina ho questo, e questa volta il display è corretto:

<b>a1 'a1' Cama&#241;o</b> 

Il primo viene generato questo modo:

<%= Html.RouteLink(Html.Encode(Model.NAME), ...... %> 

e la seconda simili:

<%= Html.Encode(Model.NAME)%> 

Quindi la mia ipotesi è che il problema sia con lo Html.RouteLink.

+0

Il tuo reclamo riguarda la codifica di caratteri internazionali o la visualizzazione di caratteri codificati dell'utente anziché dei caratteri digitati? Se è il secondo, allora la risposta "encoding twice accidentally" è corretta. In caso contrario, faccelo sapere. – Eddie

risposta

2

Quindi la mia ipotesi è che il problema è con il Html.RouteLink

Yep. Non devi codificare in HTML il parametro che entra in RouteLink, genera l'HTML stesso e quindi si occuperà di fuggire per te.

5

Codifica due volte accidentalmente?

Ad esempio, se si imposta il contenuto del Textarea sul lato server, esso codificherà automaticamente il contenuto al rendering.

Prova a guardare l'output HTML non elaborato dell'area di testo.

Normalmente quando si inseriscono gli escape all'interno del contenuto dell'area di testo, dovrebbe essere visualizzato nella textarea decodificata (visualizzato come carattere di escape senza caratteri di escape).

Quindi potrebbe essere un problema di Html.Encode accidentalmente due volte per errore.

Se i dati sono già stati sfuggiti, è consigliabile eseguire un escape (Html.Decode) prima di inserirlo nell'area di testo.

+0

Lo stesso pensiero qui. +1 – Tomalak

+0

L'ho visto. Ancora valido, no? – chakrit

Problemi correlati