Chaque fois que j'utilise php/mysql/jquery pour transmettre des données dans les deux sens, je finis par utiliser la combinaison suivante d'encodages/échappements, et cela semble bien fonctionner pour moi.
1) vous n'avez rien à faire ici, SAUF si vous envoyez une URL (je pense que ce n'est que pour les requêtes GET) - mais si vous envoyez une URL, vous devez utiliser encodeURIComponent(url), qui s'échappera correctement les &'s et les caractères spéciaux dans l'url (en savoir plus ici ).
2) Utilisez mysqli et les paramètres liés, il fera tout l'échappement pour vous (lisez à ce sujet ici )
3) J'utilise toujours ceci lors de l'écho de données dans un fichier HTML :
<?php
htmlspecialchars($string_to_escape, ENT_QUOTES, 'UTF-8', false);
?>
Cela encodera correctement tous les caractères spéciaux (le faux est pour "pas de double encodage"). Assurez-vous également que les balises méta UTF-8 appropriées sont en haut de vos pages html.
4) L'utilisation de json_encode doit toujours échapper correctement vos données, mais j'utiliserais le code du n ° 3 juste pour m'en assurer. Mais vous n'en aurez probablement besoin que si vous renvoyez des données contenant des caractères spéciaux.