Ogni volta che uso php/mysql/jquery per passare i dati avanti e indietro, finisco per usare la seguente combinazione di codifiche/escaping e sembra funzionare bene per me.
1) non devi fare nulla qui, A MENO CHE tu non stia inviando un URL (penso che questo sia solo per le richieste GET) - ma se stai inviando un URL devi usare encodeURIComponent(url), che eseguirà correttamente l'escape le &e i caratteri speciali nell'URL (vedi altro qui ).
2) Usa mysqli e parametri vincolati, farà tutto l'escape per te (leggi a riguardo qui )
3) Lo uso sempre quando faccio eco ai dati in un file HTML:
<?php
htmlspecialchars($string_to_escape, ENT_QUOTES, 'UTF-8', false);
?>
Questo codificherà correttamente tutti i caratteri speciali (il falso è per "nessuna doppia codifica"). Assicurati anche di avere i meta tag UTF-8 corretti nella parte superiore delle tue pagine html.
4) L'uso di json_encode dovrebbe sempre sfuggire ai tuoi dati in modo corretto, ma userei il codice dal n. 3 solo per essere sicuro. Ma probabilmente ne avrai bisogno solo se stai restituendo dati con caratteri speciali.