1

cURLを使用して、PHPでAJAXによって作成されたPOSTリクエストを模倣しようとしています。

私が気づいたことの1つは、%27JSのencodeuricomponentがそれをそのままにしているのに、PHPが一重引用符をエスケープするのはなぜですか?

実際にJSと同じ関数がPHPに本当にありますか?

4

1 に答える 1

1

一重引用符をエンコードしない PHP 関数はありません。その理由は、PHPが一重引用符を含むRFC 3986により厳密に準拠しているためです。

RFC 3986などの特殊文字を予約し!, ', (, ), and *ます。


URI には、「予約済み」セットの文字で区切られたコンポーネントとサブコンポーネントが含まれます。これらの文字は 、一般的な構文、各スキーム固有の構文、または URI の逆参照アルゴリズムの実装固有の構文によって
区切り文字として定義される (または定義されない) ため、「予約済み」と呼ばれます。 URI コンポーネントのデータが 区切り文字としての予約文字の目的と競合する場合、URI を形成する前に、競合するデータをパーセントでエンコードする必要があります。



予約済み = gen-delims / sub-delims

gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"

サブデリム = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="

php に一致させ、一重引用符を js でエンコードしたい場合は、次のような関数を使用できます。

function fixedEncodeURIComponent (str) {  
  return encodeURIComponent(str).replace(/[!'()*]/g, escape);  
} 

なぜエンコードしない必要があるのですか?CURL でも動作するはずです。

于 2014-02-07T01:38:19.997 に答える