2011-01-24 15 views
14

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

posso dire che avrei dovuto sempre utilizzare

  • urlencode: per i singoli criteri di parti degli archi

    $url = 'http://test.com?param1=' . urlencode('some data') . '&param2=' . urlencode('something else'); 
    
  • htmlentities: per sfuggire caratteri speciali come <> in modo che, se verrà reso correttamente il browser

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

risposta

29

Prima di tutto, non si dovrebbe usare htmlentites circa il 99% del tempo. Invece, è necessario utilizzare htmlspecialchars() per il testo di escape da utilizzare nei documenti xml/html. htmlentities sono utili 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 urlencode, hai colpito il chiodo sulla testa.

Quindi, per ricapitolare:

  • All'interno HTML:

    <b><?php echo htmlspecialchars($string, ENT_QUOTES, "UTF-8"); ?></b> 
    
  • All'interno di un URL:

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

Questo è giusto. Anche se - htmlspecialchars va bene, purché 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 mette un URL in un contesto html (diciamo - nel href di un a -tag), è necessario sfuggire che. Così vedrete spesso qualcosa di simile:

echo "<a href='" . htmlspecialchars("?foo=".urlencode($foo)) . "'>clicky</a>" 
+0

Grande risposta. Questo è un esempio di come eseguire correttamente l'escape per un contesto all'interno di un altro contesto. È importante notare che anche se urlencode non emetterà mai char speciali HTML per causare problemi, non fa male sfuggire all'intero contenuto di attributi html. – Phil