Sempre que uso php/mysql/jquery para passar dados para frente e para trás, acabo usando a seguinte combinação de codificações/escapings, e parece funcionar bem para mim.
1) você não precisa fazer nada aqui, a menos que esteja enviando uma URL (acho que isso é apenas para solicitações GET) - mas se você estiver enviando uma url, precisará usar encodeURIComponent(url), que escapará corretamente os &'s e os caracteres especiais no URL (veja mais aqui ).
2) Use mysqli e parâmetros vinculados, ele fará todo o escape para você (leia sobre isso aqui )
3) Eu sempre uso isso ao ecoar dados em um arquivo HTML:
<?php
htmlspecialchars($string_to_escape, ENT_QUOTES, 'UTF-8', false);
?>
Isso codificará corretamente todos os caracteres especiais (o false é para "sem codificação dupla"). Certifique-se também de colocar as metatags UTF-8 adequadas no topo de suas páginas html.
4) Usar json_encode sempre deve escapar seus dados corretamente, mas eu usaria o código de #3 apenas para ter certeza. Mas você provavelmente só precisará dele se estiver retornando dados com caracteres especiais.