ホームページ >バックエンド開発 >PHPチュートリアル >'method=\'post\' enctype=\'text/plain\'' が PHP の $_POST 配列との非互換性を引き起こすのはなぜですか?
謎の解明: "method="post" enctype="text/plain" の謎を理解する 非互換性
の領域Web 開発では、enctype 属性が次の場合に、POST メソッド経由で送信されたフォーム データが意図した宛先に到達できない可能性があることがよくあります。この問題の複雑さを掘り下げて、その複雑さを解明し、この非互換性の背後にある根本的な原因を発見しようとします。
深部への探求: PHP がデータの生成に失敗する理由$_POST
問題の核心は、PHP が処理できないことにあります。 "text/plain" エンコーディング。変数 $HTTP_RAW_POST_DATA に値を割り当てているにもかかわらず、PHP は $_POST 配列にフォーム データを設定できません。これは単なる見落としではなく、意図的な設計上の決定です。
GET と POST の区別: エンコーディングの物語
GET を区別することが重要ですGET メソッドでは、変数が URL 内のクエリ文字列を構成するため、URL エンコードが必要です。 enctype 属性に関係なく、ブラウザは GET 変数を自動的に URL エンコードし、「text/plain」を無効にします。
逆に、POST では、変数は URL の一部ではなく、HTTP リクエストの最終ヘッダーとして送信されます。ここでは、「text/plain」と「application/x-www-form-urlencoded」のエンコード オプションが利用可能ですが、曖昧さのない解決策を提供できるのは後者だけです。
「text/」内には曖昧さが潜んでいますplain": 注意すべき話
「text/plain」は単純なエンコーディングであるように見えますが、これには次のような問題が潜んでいます。隠された落とし穴。複数の値を区別するメカニズムが欠けているため、入力データの解釈があいまいになる可能性があります。たとえば、次のフォームを考慮します。
<form method="post" enctype="text/plain" action="proc.php"> <textarea name="input1">abc input2=def</textarea> <input name="input2" value="ghi" /> <input type="submit"> </form>
このフォームが「input1」と「input2」の値を期待する PHP スクリプトにデータを送信すると、あいまいさが生じます。
print($HTTP_RAW_POST_DATA);
依存解釈上、出力は次のようになります。 be:
そのような曖昧さは " application/x-www-form-urlencoded」エンコーディングにより、信頼性の高いデータを保証します取得。
以上が'method=\'post\' enctype=\'text/plain\'' が PHP の $_POST 配列との非互換性を引き起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。