Convertire i caratteri speciali in entità HTML, senza modificare i tag e parametri
-
19-09-2019 - |
Domanda
Sto usando l'editor FreeTextBox per ottenere qualche HTML creato dagli utenti.
Il problema è questo editor non è la conversione caratteri speciali in entità HTML a eccezione di "<>". Non posso usare theHTML = Server.HtmlEncode(theHTML)
, perché converte tutto il codice HTML tra cui tag e parametri, e io non voglio creare un elenco di linee unfinishable theHTML.Replace
.
C'è qualche altra funzione o un metodo a disposizione per la conversione in entità HTML, ma solo i tag fuori?
Soluzione 3
Dopo aver cercato un sacco, ho scoperto che stavo usando la proprietà sbagliata del componente FreeTextBox. La proprietà è stata ConvertHtmlSymbolsToHtmlCodes che vanta per essere vero.
Essa contribuisce anche a utilizzare FormatHtmlTagsToXhtml se è necessario inserire il codice in pagine XHTML, perché utilizza una forte conferma con i parametri tag e citazioni che li circondano.
Altri suggerimenti
Se hai una miscela di significato <
avviare una tag e <
senso letterale segno minore, non si può forse dire che è ‘un tag’ di ignorare e che non lo è.
A proposito di tutto si potrebbe fare sarebbe quella di rilevare usi <
che non erano un tag di inizio o di fine convenzionalmente formata, utilizzando una brutta inaffidabile regex qualcosa del tipo:
<(?!\w+(\s+\w+="[^"<]*")*\s*/?>|/\w+\s*>)
e sostituirli con <
. Allo stesso modo per &
con &
:
&(?!\w+;|#\d+;|#x[0-9A-Fa-f]+;)
(>
non sono pertanto da sfuggito.)
Questo non permetterà ad ogni possibile modo valido di elementi costruire, e permetterà elementi rotti mis-nidificati, e le entità inesistenti, e sarebbe rovinare i costrutti non-elemento come commenti. A causa regex non può analizzare HTML, per non parlare di HTML con l'aggiunta di cocci croccanti.
Quindi, non è certo infallibile. Se si desidera una corretta marcatura che non rompere la tua pagina quando lasciano accidentalmente un div aperta, il miglior primo passo è quello di analizzare come XHTML e rifiutare con un errore se non è ben formato XML.
Se si dispone di una ricca componente editor di testo che genera output in cui un <
letterale non è sfuggito, allora è il momento di sostituire il componente con qualcosa di meno spaventosa. Ma in generale non è una buona idea per consentire agli utenti di creare HTML, perché sono davvero spazzatura a esso. Inoltre permettendo a chiunque di HTML ingresso dà loro il controllo completo sul distruggendo il sito e la sua sicurezza con JavaScript. Un linguaggio di testo-formattazione più semplice è spesso una vittoria.
suggerirei parsing attraverso ogni elemento utilizzando Linq a XML e codifica il valore di ogni elemento e attributo nodo. Cercherò di trovare un qualche codice, ma hey è 17:00 di Venerdì!