Sto per inviare un codice html nel codice che potrebbe contenere input utente non sicuri. Ho notato che se fossi riuscito a scappare dall'oggetto, GMail mostrerà il contenuto in escape (quindi se il mio soggetto è "This & That"
, che io sanizzo come "This & That"
, Gmail mostra quest'ultimo). Lo stesso vale per Thunderbird. È lecito ritenere che tutti i client di posta elettronica non necessitino dell'esplorazione dell'Html dell'oggetto?Gli oggetti di posta elettronica devono essere salvati in html?
risposta
Non è necessario codificare le entità HTML in una riga dell'oggetto. Il motivo della codifica nel corpo HTML è se si utilizza XHTML che, poiché deriva da XML, considera &
come un carattere riservato.
Tuttavia, la riga dell'oggetto di un'e-mail non è in HTML, XML o XHTML. È solo testo puro. Per questo motivo, non è necessario codificare una e commerciale come &
. Se lo si codifica, poiché non viene analizzato come HTML, verrà visualizzato come codificato.
Se si desidera includere caratteri non ASCII (ad esempio £
), è necessario codificare l'intera 'busta' (incluso il corpo dell'email) come UTF-8.
Così, nel codice, di seguito verrà mostrato come:
| Subject Line | Body
====================================
& | & | &
& | & | &
UTF-8 £ | £ | £
ASCII £ | n/a | n/a
£ | £ | £
NB: Microsoft Office ha una strana implementazione di UTF-8, quindi non tutti i caratteri UTF-8 funzionerà.
Il campo Oggetto è all'esterno del del "contenuto HTML". Non ha nulla a che fare con l'HTML.
Tuttavia, non ho un punto di riferimento per questo ...
Soggetto di non hanno bisogno di essere fuggiti html tuttavia, possono essere sfuggiti. Le specifiche SMTP originali definivano che i messaggi dovrebbero essere ascii (RFC822 Sezione 3). Ciò è stato confermato in RFC2822 tuttavia, RFC2047 definisce le estensioni di intestazione che consentono di codificare i campi di intestazione all'interno dei messaggi mime per consentire il testo non-ascii.
Questo formato di parola codificata consente di utilizzare codifiche come utf-8 all'interno delle intestazioni di posta elettronica. Per esempio:
=?iso-8859-1?q?this=20is=20some=20text?=
Questa è la versione ISO-8859-1 codifica di "questo è un testo". Questo metodo può essere usato per enodificare cose come il simbolo della sterlina (£) o caratteri accentati/non-ascii.
Mentre non è necessario codificare il soggetto in HTML, accertarsi di disinfettarlo per il contesto in cui si trova: un'intestazione HTTP. Rimuovi i caratteri di interruzione di riga come '\ n' e' \ r'! –