Pergunta

Estou postando o conteúdo de um campo de formulário via Ajax em um script PHP e usando JavaScript para escape(field_contents). O problema é que quaisquer sinais Plus estão sendo retirados e substituídos por espaços. Como posso 'codificar' o sinal de plus e depois 'decodificar' de forma adequada no lado do PHP?

Foi útil?

Solução

Usar encodeURIComponent() No JS e no PHP, você deve receber os valores corretos.

Nota: Quando você acessa $_GET, $_POST ou $_REQUEST No PHP, você está recuperando valores que já foram decodificados.

Exemplo:

Em seu JS:

// url encode your string
var string = encodeURIComponent('+'); // "%2B"
// send it to your server
window.location = 'http://example.com/?string='+string; // http://example.com/?string=%2B

Em seu servidor:

echo $_GET['string']; // "+"

É apenas a solicitação HTTP bruta que contém os dados codificados por URL.

Para obter uma solicitação, você pode recuperar isso do URI. $_SERVER['REQUEST_URI'] ou $_SERVER['QUERY_STRING']. Para um post de urle file_get_contents('php://stdin')

NB:

decode() Funciona apenas para caracteres codificados por bytes únicos. Não funcionará para a faixa completa do UTF-8.

por exemplo:

text = "\u0100"; // Ā
// incorrect
escape(text); // %u0100 
// correct
encodeURIComponent(text); // "%C4%80"

Observação: "%C4%80" é equivalente a: escape('\xc4\x80')

Qual é a sequência de bytes (\xc4\x80) isso representa Ā no UTF-8. Então, se você usar encodeURIComponent() O lado do servidor deve saber que está recebendo UTF-8. Caso contrário, o PHP usará a codificação.

Outras dicas

Em JavaScript Tente:

encodeURIComponent() 

E em PHP:

urldecode($_POST['field']);

O valor hexadecimal que você está procurando é %2B

Para obtê -lo automaticamente no PHP, execute sua string através urlencode($stringVal). E então execute o Rhough urldecode($stringVal) para recuperá -lo.

Se você deseja que o javascript lida com isso, use escape( str )

Editar

Depois do comentário de @Bobince, eu fiz mais leitura e ele está correto. Usar encodeURIComponent(str) e decodeURIComponent(str). Escape não converterá os personagens, apenas escapará -los com \'s

Para torná -lo mais interessante e, esperançosamente, permitir menos cabelos puxando para outra pessoa. Usando o Python, o dicionário construído para um dispositivo que podemos usar o CLL para configurar.

Problema: {"timezone":"+5"} //throws an error " 5"

Solução: {"timezone":"%2B"+"5"} //Works

Então, em poucas palavras:

var = {"timezone":"%2B"+"5"}
json = JSONEncoder().encode(var)
subprocess.call(["curl",ipaddress,"-XPUT","-d","data="+json])

Obrigado a este post!

Se você precisar fazer um cacho no php, deve usar urlencode() Do PHP, mas individualmente!

strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+")

Se você fizer urlencode(strPOST), você trará outro problema, você terá um item1 e será alterado %xx valor e terá um valor, veja aqui o retorno!

Exemplo 1

$strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+") will give Item1=Value1&Item2=%2B

Exemplo 2

$strPOST = urlencode("Item1=" . $Value1 . "&Item2=+") will give Item1%3DValue1%26Item2%3D%2B

Exemplo 1 é a boa maneira de preparar string para postagem em curl

O Exemplo 2 mostra que o receptor não verá o igual e o ampersa e para distinguir o valor!

Meu problema foi com os sotaques (á É ñ) e o sinal de mais (+) quando eu tentarei salvar "exemplos de código" JavaScript para MySQL:

Minha solução (não da melhor maneira, mas funciona):

JavaScript:

function replaceAll( text, busca, reemplaza ){
  while (text.toString().indexOf(busca) != -1)
  text = text.toString().replace(busca,reemplaza);return text;
}


function cleanCode(cod){
code = replaceAll(cod , "|", "{1}" ); // error | palos de explode en java
code = replaceAll(code, "+", "{0}" ); // error con los signos mas   
return code;
}

função para salvar:

function save(pid,code){
code = cleanCode(code); // fix sign + and |
code = escape(code); // fix accents
var url = 'editor.php';
var variables = 'op=save';
var myData = variables +'&code='+ code +'&pid='+ pid +'&newdate=' +(new Date()).getTime();    
var result = null;
$.ajax({
datatype : "html",
data: myData,  
url: url,
success : function(result) {
    alert(result); // result ok                     
},
}); 
} // end function

função em php:

<?php
function save($pid,$code){
    $code= preg_replace("[\{1\}]","|",$code);
    $code= preg_replace("[\{0\}]","+",$code);
    mysql_query("update table set code= '" . mysql_real_escape_string($code) . "' where pid='$pid'");
}
?>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top