1. ホーム
  2. javascript

[解決済み] AJAX POSTとプラス記号( + ) -- エンコードするには?

2022-10-11 06:42:55

質問

フォームフィールドの内容をAJAX経由でPHPスクリプトにPOSTし、JavaScriptを使って escape(field_contents) . 問題は、プラス記号が除去され、スペースに置き換えられてしまうことです。 どうすれば安全にプラス記号を「エンコード」し、PHP側で適切に「デコード」できるのでしょうか?

どのように解決するのですか?

使用方法 encodeURIComponent() を使用すると、JSと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'] . urlencodeされたPOSTの場合。 file_get_contents('php://stdin')

NBです。

decode() は1バイトのエンコードされた文字に対してのみ機能します。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 はエンコーディングを歪めてしまいます。