AJAXによるポストおよびプラス記号(+)—どのようにエンコード?
-
21-09-2019 - |
質問
私の掲載内容のフォームフィールドによAJAXへのPHPスクリプトを使用webブラウザでJavaScriptの実行を escape(field_contents)
.問題はプラスの看板が剥離して置き換えます。したいので安全に'エンコードのプラス記号を適切に'デコードでは、PHP。
解決
使用 encodeURIComponent()
JSやPHPで届き、正しい値です。
注意:アクセスす $_GET
, $_POST
または $_REQUEST
PHPは、取得価値について既に復号化された.
例:
お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
サーバ:
echo $_GET['string']; // "+"
この原HTTPリクエストが含まれるurl符号化されたデータです。
のためにはGETリクエストを取得することができますことから、 URI. $_SERVER['REQUEST_URI']
または $_SERVER['QUERY_STRING']
.のためのurlencoded、 file_get_contents('php://stdin')
※
decode()
だけのためのシングルバイト符号化された文字です。では、UTF-8です。
例:
text = "\u0100"; // Ā
// incorrect
escape(text); // %u0100
// correct
encodeURIComponent(text); // "%C4%80"
注意: "%C4%80"
に相当す: escape('\xc4\x80')
のバイトシーケンス(\xc4\x80
れている Ā
UTF-8です。でご利用の場合 encodeURIComponent()
サーバ側の知らなければならないのではUTF-8です。そのPHPがmangleのエンコーディングです。
他のヒント
には、JavaScriptの試みます:
encodeURIComponent()
とPHPでます:
urldecode($_POST['field']);
あなたが探している16進数の値は%2B
urlencode($stringVal)
を通して、あなたの文字列を実行し、PHPで自動的にそれを得るために。そして、それを取り戻すためにurldecode($stringVal)
rhoughそれを実行します。
<ストライキ>あなたはJavaScriptがそれを処理したい場合は、使用escape( str )
ストライキ>
編集
@ bobinceのコメントの後、私はもっと読んでなかったし、彼は正しいです。
encodeURIComponent(str)
とdecodeURIComponent(str)
を使用してください。エスケープは\
の
それをより面白くするためには、うまくいけば他の誰かのために引っ張っ少ない髪を有効にします。 pythonを使用して、我々が設定するためにカールを使用することができ、デバイスのための辞書を内蔵しています。
問題:{"timezone":"+5"} //throws an error " 5"
ソリューション:{"timezone":"%2B"+"5"} //Works
だから、一言で言えば:
var = {"timezone":"%2B"+"5"}
json = JSONEncoder().encode(var)
subprocess.call(["curl",ipaddress,"-XPUT","-d","data="+json])
このポストに感謝!
あなたは、PHPのカールを行う必要がある場合は、個別にPHPからurlencode()
を使用しますが、必要があります!
strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+")
あなたがurlencode(strPOST)
を行う場合、あなたはあなたに別の問題をもたらすでしょう、あなたは1アイテム1を持っていますし、&変更%xxの値になりますし、一つの値としても、ここでリターンをダウン参照してください!
実施例1
$strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+") will give Item1=Value1&Item2=%2B
(実施例2)
$strPOST = urlencode("Item1=" . $Value1 . "&Item2=+") will give Item1%3DValue1%26Item2%3D%2B
実施例1は、カール
にPOSTの文字列を準備するための良い方法であります例2ショー受容体が等しく、両方の値を区別するために、アンパサンドは表示されませんことを!
私は、MySQLへのjavascriptの「コード例」を保存しようとしたときに私の問題は、アクセント(A〜E n)とプラス記号(+)とした。
私のソリューション(ないより良い方法、それは動作します):
ジャバスクリプトます:
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;
}
保存するには、機能:
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
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'");
}
?>