Estou postando o conteúdo de um campo de formulário via AJAX para um script PHP e usando JavaScript para escape(field_contents)
. O problema é que todos os sinais de mais estão sendo eliminados e substituídos por espaços. Como posso 'codificar' com segurança o sinal de mais e, em seguida, 'decodificá-lo' apropriadamente no lado do PHP?
98
Respostas:
Use
encodeURIComponent()
em JS e em PHP você deve receber os valores corretos.Nota: Ao acessar
$_GET
,$_POST
ou$_REQUEST
em PHP, você está recuperando valores que já foram decodificados.Exemplo:
Em seu JS:
No seu servidor:
É apenas a solicitação HTTP bruta que contém os dados codificados de url.
Para uma solicitação GET, você pode recuperá-la de
URI. $_SERVER['REQUEST_URI']
ou$_SERVER['QUERY_STRING']
. Para um POST codificado por url,file_get_contents('php://stdin')
NB:
decode()
só funciona para caracteres codificados de byte único. Não funcionará com a faixa UTF-8 completa.por exemplo:
Nota:
"%C4%80"
é equivalente a:escape('\xc4\x80')
Qual é a sequência de bytes (
\xc4\x80
) que representaĀ
em UTF-8. Portanto, se você usarencodeURIComponent()
seu servidor deve saber que ele está recebendo UTF-8. Caso contrário, o PHP irá destruir a codificação.fonte
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
ou<meta charset="UTF-8">
também em PHP com o cabeçalho HTTP Content-Type.header('Content-Type: text/html;charset=UTF-8');
PS: & rsqo; não decodifica no navegador (FF3.5).Em JavaScript, tente:
e em PHP:
fonte
urldecode
também está errado, pois o PHP irá decodificá-lo automaticamente antes de preencher$_POST
.O valor hexadecimal que você está procurando é
%2B
Para obtê-lo automaticamente no PHP, execute sua string
urlencode($stringVal)
. E então execute-ourldecode($stringVal)
para recuperá-lo.Se você quiser que o JavaScript trate disso, useescape( str )
Editar
Após o comentário de @bobince eu li mais e ele está correto. Use
encodeURIComponent(str)
edecodeURIComponent(str)
. Escape não converterá os caracteres, apenas os escape com\
'sfonte
escape
(ouunescape
) em JavaScript; eles não são iguais à codificação de URL e serão incorretos para + e quaisquer caracteres Unicode não ASCII. encodeURIComponent / decodeURIComponent é quase sempre o que você deseja.Para torná-lo mais interessante e, com sorte, permitir menos puxões de cabelo para outra pessoa. Usando python, um dicionário construído para um dispositivo que podemos usar curl para configurar.
Problema:
{"timezone":"+5"} //throws an error " 5"
Solução:
{"timezone":"%2B"+"5"} //Works
Então, em poucas palavras:
Graças a este post!
fonte
Se você tiver que fazer um curl em php, deve usar
urlencode()
do PHP, mas individualmente!Se fizer isso
urlencode(strPOST)
, você trará outro problema, você terá um item1 e & será alterado do valor% xx e será como um valor, veja aqui embaixo o retorno!Exemplo 1
Exemplo 2
O Exemplo 1 é uma boa maneira de preparar a string para POST em curl
O Exemplo 2 mostra que o receptor não verá o igual e o E comercial para distinguir os dois valores!
fonte
meu problema era com os acentos (á É ñ) e o sinal de mais (+) quando tento salvar "exemplos de código" javascript no mysql:
minha solução (não da melhor forma, mas funciona):
javascript:
função para salvar:
função em php:
fonte