フォーム フィールドの内容を AJAX 経由で PHP スクリプトに投稿し、JavaScript を使用してエスケープしています (field_contents)。問題は、プラス記号が削除され、スペースに置き換えられてしまうことです。 PHP でプラス記号を安全に「エンコード」し、適切に「デコード」するにはどうすればよいですか?
JavaScript で試してみる:
PHP:
JS および PHP で encodeuriccomponent() を使用すると、正しい値が返されるはずです。
注: PHP で $_GET、$_POST、または $_REQUEST にアクセスすると、すでにデコードされた値が取得されます。
例:
JS 内:
あなたのサーバー上で
元の HTTP リクエストのみに URL エンコードされたデータが含まれます。
GET リクエストの場合は、URI から取得できます。 $_SERVER['REQUEST_URI'] または $_SERVER['QUERY_STRING']。 URL コード化された POST の場合、file_get_contents('php://stdin')
注:
Decode() は、シングルバイトでエンコードされた文字にのみ適用されます。 UTF-8 範囲全体では機能しません。
は次と同等です: escape('\xc4\x80') これは、UTF-8 で Ā を表すバイト シーケンス (\xc4\x80) です。したがって、encodeuriccomponent() を使用する場合、サーバー側は UTF-8 を受信していることを認識している必要があります。そうしないと、PHP がエンコードを混乱させます。
escape('\xc4\x80')
JavaScript で試してみる:
リーリーPHP:
リーリーJS および PHP で encodeuriccomponent() を使用すると、正しい値が返されるはずです。
注: PHP で $_GET、$_POST、または $_REQUEST にアクセスすると、すでにデコードされた値が取得されます。
例:
JS 内:
リーリーあなたのサーバー上で
リーリー元の HTTP リクエストのみに URL エンコードされたデータが含まれます。
GET リクエストの場合は、URI から取得できます。 $_SERVER['REQUEST_URI'] または $_SERVER['QUERY_STRING']。 URL コード化された POST の場合、file_get_contents('php://stdin')
注:
Decode() は、シングルバイトでエンコードされた文字にのみ適用されます。 UTF-8 範囲全体では機能しません。
###例えば:### リーリー注:
"Ā"は次と同等です:
これは、UTF-8 で Ā を表すバイト シーケンス (\xc4\x80) です。したがって、encodeuriccomponent() を使用する場合、サーバー側は UTF-8 を受信していることを認識している必要があります。そうしないと、PHP がエンコードを混乱させます。
escape('\xc4\x80')