AJAX POST e Plus Sign (+) – Come codificare?

Sto postando il contenuto di un campo modulo tramite AJAX a uno script PHP e utilizzando JavaScript per l’ escape(field_contents) . Il problema è che eventuali segni più vengono eliminati e sostituiti da spazi. Come posso tranquillamente “codificare” il segno più e quindi “decodificarlo” in modo appropriato sul lato PHP?

Usa encodeURIComponent() in JS e in PHP dovresti ricevere i valori corretti.

Nota: quando accedi a $_GET , $_POST o $_REQUEST in PHP, stai recuperando i valori che sono già stati decodificati.

Esempio:

Nel tuo 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 

Sul tuo server:

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

È solo la richiesta HTTP non elaborata che contiene i dati codificati dell’URL.

Per una richiesta GET è ansible recuperarla URI. $_SERVER['REQUEST_URI'] URI. $_SERVER['REQUEST_URI'] o $_SERVER['QUERY_STRING'] . Per un POST urlencoded, file_get_contents('php://stdin')

NB:

decode() funziona solo per caratteri codificati a byte singolo. Non funzionerà per l’intera gamma UTF-8.

per esempio:

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

Nota: "%C4%80" è equivalente a: escape('\xc4\x80')

Qual è la sequenza di byte ( \xc4\x80 ) che rappresenta Ā in UTF-8. Quindi se si utilizza encodeURIComponent() il lato server deve sapere che sta ricevendo UTF-8. Altrimenti, PHP manterrà la codifica.

In JavaScript prova:

 encodeURIComponent() 

e in PHP:

 urldecode($_POST['field']); 

Il valore esadecimale che stai cercando è %2B

Per ottenerlo automaticamente in PHP, esegui la tua stringa attraverso urlencode($stringVal) . Quindi esegui il comando urldecode($stringVal) per recuperarlo.

Se vuoi che il JavaScript lo gestisca, usa escape( str )

modificare

Dopo il commento di @ bobince ho fatto più letture e lui ha ragione. Usa encodeURIComponent(str) e decodeURIComponent(str) . Escape non convertirà i personaggi, ma li sfuggirà con \ ‘s

Per renderlo più interessante e, si spera, abilitare meno capelli tirando per qualcun altro. Usando python, dizionario costruito per un dispositivo che possiamo usare curl per configurare.

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

Soluzione: {"timezone":"%2B"+"5"} //Works

Quindi, in poche parole:

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

Grazie a questo post!

Se devi fare un curl in php, dovresti usare urlencode() da PHP ma individualmente!

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

Se urlencode(strPOST) , ti porterai un altro problema, avrai un Item1 e & cambierà il valore di% xx e sarà come un valore, vedi qui sotto il ritorno!

Esempio 1

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

Esempio 2

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

L’Esempio 1 è il modo migliore per preparare la stringa per POST in arricciatura

L’esempio 2 mostra che il recettore non vedrà l’uguale e la e commerciale per distinguere entrambi i valori!

il mio problema era con gli accenti (á É ñ) e il segno più (+) quando provavo a salvare gli “esempi di codice” di javascript su mysql:

la mia soluzione (non nel modo migliore, ma funziona):

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; } 

funzione per salvare:

 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 

funzione in 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'"); } ?>