Escaping / codifica URL / HTML

Sono sempre stato confuso con la codifica URL / HTML / Escaping. Sto usando PHP, quindi voglio chiarire qualcosa.

Posso dire che dovrei sempre usare

  • urlencode : per le singole parti di stringhe di query

     $url = 'http://test.com?param1=' . urlencode('some data') . '&param2=' . urlencode('something else'); 
  • htmlentities : per l’escape di caratteri speciali come modo che se il rendering venga eseguito correttamente dal browser

Ci sarebbero altri posti in cui potrei usare ciascuna funzione. Non sono bravo con queste cose che fuggono, sempre confuse da loro

Prima di tutto, non dovresti usare htmlentites circa il 99% delle volte. Invece, dovresti usare htmlspecialchars() per il testo di escape da usare nei documenti xml / html. htmlentities è utile solo per visualizzare caratteri che il set di caratteri nativo che stai utilizzando non può visualizzare (è utile se le tue pagine sono in ASCII, ma hai alcuni caratteri UTF-8 che desideri visualizzare). Invece, fai semplicemente l’intera pagina UTF-8 (non è difficile), e finiscila.

Per quanto riguarda l’ urlencode , hai colpito l’unghia sulla testa.

Quindi, per riassumere:

  • HTML interno:

      
  • All’interno di un URL:

     $url = '?foo='.urlencode('bar'); 

Questo è giusto. Anche se – htmlspecialchars va bene, a patto che i tuoi caratteri siano dritti. Che dovresti fare comunque. Quindi tendo ad usarlo, quindi lo scoprirò presto se lo avessi incasinato.

Si noti inoltre che se si inserisce un URL in un contesto html (ad esempio – nell’href di un a -tag), è necessario evitarlo. Quindi vedrai spesso qualcosa come:

 echo "clicky"