Come si può evitare la doppia codifica di entità HTML quando vengono ammessi in entrata

StackOverflow https://stackoverflow.com/questions/2604569

  •  25-09-2019
  •  | 
  •  

Domanda

Come posso evitare una doppia codifica delle entità HTML, o correggerli a livello di codice?

Sto usando la codifica (funzione dalle HTML :: Entities) modulo perl a soggetti codifica HTML in input dell'utente. Il problema qui è che ci permettono anche agli utenti di inserire entità HTML direttamente e queste entità finiscono per essere doppio codificato.

Ad esempio, un utente può immettere:

Stackoverflow & Perl = Awesome…

Questo finisce per essere codificato a

Stackoverflow & Perl = Awesome…

Ciò rende nel browser come

Stackoverflow & Perl = Awesome…

Vogliamo che questo rende come

Stackoverflow & Perl = Awesome...

C'è un modo per evitare questa doppia codifica? O c'è un modulo o frammento di codice che può facilmente risolvere questi problemi doppia codifica?

Ogni aiuto è molto apprezzato!

È stato utile?

Soluzione

È possibile decodificare la stringa prima:

my $input = from_user();

my $encoded = encode_entities( decode_entities $input );

Altri suggerimenti

C'è un modo estremamente semplice per evitare questo:

  1. Rimuovi tutte le entità su di ingresso (li trasformano in Unicode)
  2. Codifica in entità ancora nella fase della produzione.

Si consiglia di salvare la chiamata a encode() fino a quando si recupera il valore per la visualizzazione, piuttosto che prima di riporlo. Fino a quando si è coerenti nella vostra meccanismo di recupero, i dati aggiuntivi nel database probabilmente non vale fretting sopra.

Modifica

Rileggendo la tua domanda mi rendo conto che ora la mia risposta non risolve completamente il problema visto che chiamando encode() più tardi sarà ancora avere gli stessi risultati. Non sapendo di un'alternativa me stesso, non può essere di grande aiuto, ma si può prendere in considerazione trovare un metodo più adatto per la codifica che rispetti i simboli esistenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top