Qual é a codificação correta / escape / htmlentities necessários ao enviar dados de js para php, php para mysql e para as respostas REST json

Isso é algo que encontro muitas vezes, e geralmente acabo de recorrer à tentativa e tentar novamente o método até os dados funcionarem. Achei que SO sabia qual é a melhor prática para manter os dados e não bagunçar o json.

Vamos assumir que os dados que eu quero enviar são dados de texto do tipo mais irritante – caracteres especiais, &, <, ", \ n, \ n \ r, \ t, +, etc.

Vamos também assumir que eu quero manter tudo em utf8, e minha tabela mysql está configurada para ser utf8. No entanto, uma vez que o suporte utf8 do PHP está faltando, isso deve ser considerado.

O que codificar / escaping / htmlentities devo fazer de:

1) Enviar dados JSON do cliente JS para PHP via AJAX POST (qualquer coisa diferente para o GET?)

2) Descodificação de dados em PHP e armazenamento de string de texto no database mysql (ou armazenamento de dados escapados / codificados?)

3) Recuperando dados do MySQL DB em PHP e retornou como resposta JSON ao pedido JS AJAX

4) Em uma resposta JSON da nossa REST api

Sempre que uso php / mysql / jquery para passar dados de um lado para outro, 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 você esteja enviando uma URL (acho que isso é apenas para pedidos GET) – mas se você está enviando uma URL, você precisa usar encodeURIComponent (url), que escapingá corretamente os caracteres especiais e especiais na url (veja mais aqui ).

2) Use mysqli e parâmetros ligados, fará todo o escape para você (leia sobre isso aqui )

3) Eu sempre uso isso ao fazer eco de dados em um arquivo HTML:

< ?php htmlspecialchars($string_to_escape, ENT_QUOTES, 'UTF-8', false); ?> 

Isso codificará corretamente todos os caracteres especiais (o falso é para “nenhuma codificação dupla”). Certifique-se também de você as meta tags UTF-8 apropriadas na parte superior das suas páginas html.

4) Usar json_encode deve sempre escaping seus dados corretamente, mas eu usaria o código do # 3 apenas para ter certeza. Mas você provavelmente só precisará disso se você estiver retornando dados com caracteres especiais nele.

  1. Para enviar dados do json para o PHP, você não precisa fazer nada de especial. JSON é apenas um javascript serializado ‘variável’
  2. use declarações preparadas! não tente decodificar / remover / alterar o conteúdo com php
  3. use as funções apropriadas para escaping dados para o json (não sei se há uma function php para isso)
  4. o mesmo que 3.