AJAX to a PHP script and via JavaScript to escape(field_contents)
。]を使用してフォームフィールドの内容をPOSTします。問題はどのようにプラス記号を安全に「エンコード」してから、PHP側で適切に「デコード」できますか?
JSおよびPHP)でencodeURIComponent()
を使用すると、正しい値を受け取るはずです。
注:PHPで_$_GET
_、_$_POST
_または_$_REQUEST
_にアクセスすると、既にデコードされている値を取得しています。
例:
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']; // "+"
_
URLエンコードされたデータを含むのは、生のHTTPリクエストのみです。
GETリクエストの場合、これを_URI. $_SERVER['REQUEST_URI']
_または_$_SERVER['QUERY_STRING']
_から取得できます。 urlencoded POSTの場合、file_get_contents('php://stdin')
注意:
decode()
は、シングルバイトエンコードされた文字に対してのみ機能します。 UTF-8の全範囲では機能しません。
例えば:
_text = "\u0100"; // Ā
// incorrect
escape(text); // %u0100
// correct
encodeURIComponent(text); // "%C4%80"
_
注:_"%C4%80"
_はescape('\xc4\x80')
と同等です
これは、UTF-8で_\xc4\x80
_を表すバイトシーケンス(_Ā
_)です。したがって、encodeURIComponent()
を使用する場合、サーバー側はUTF-8を受信していることを知っている必要があります。そうでない場合、PHPはエンコーディングを破壊します。
JavaScriptで試してください:
encodeURIComponent()
およびPHPの場合:
urldecode($_POST['field']);
それをより面白くし、できれば他の人の髪の毛を引っ張らないようにすること。 Pythonを使用して、curlを使用して構成できるデバイス用の辞書を作成しました。
問題:{"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])
この投稿に感謝します!
探している16進値は_%2B
_です
PHPで自動的に取得するには、文字列をurlencode($stringVal)
で実行し、urldecode($stringVal)
で実行して元に戻します。
JavaScriptで処理する場合は、escape( str )
を使用します
編集
@bobinceのコメントの後、私はもっと読み、彼は正しい。 encodeURIComponent(str)
およびdecodeURIComponent(str)
を使用します。エスケープは文字を変換せず、_\
_でエスケープするだけです
Phpでcurlを実行する必要がある場合は、urlencode()
from PHPしかし個別に!
_strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+")
_
urlencode(strPOST)
を実行すると、別の問題が発生します。1つのItem1があり、&が%xxの値を変更して1つの値になります。
例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のcurlで文字列を準備する良い方法です
例2は、両方の値を区別するために、レセプタが等しいとアンパサンドを表示しないことを示しています!