PHP および Javascript での Zend Framework URI 空間エンコード
-
21-09-2019 - |
質問
/controller/action/var1/value1/var2/value2 のような Zend Framework URI があります。
Value2 にはスペース文字が含まれています。PHPでどのようにエンコードすればよいでしょうか?value2 で urlencode を使用すると、スペースが「%20f」ではなく「+」に変換されます。それは大丈夫ですか?
この value2 は、クライアント側の JavaScript によって href の場所にも追加されます。そこでエスケープ機能を使用していますが、リンクをクリックすると、Firefoxのアドレスバーに「+」も「%20f」も表示されません。ただし、Firebug の「ネット」タブで見ると、%20f と表示されます。
PHP と JavaScript ではどの関数を使用する必要がありますか?
解決
最初の質問についてですが、それは次の違いです。 urlencode
そして rawurlencode
:
var_dump(urlencode("hello, world"));
入手できます:
string 'hello%2C+world' (length=14)
その間
var_dump(rawurlencode("hello, world"));
取得します:
string 'hello%2C%20world' (length=16)
どちらも問題ないと思います。でも念のため、ぜひ試してみてください ;-)
2点目について:Firefox は、URL をエンコードするのではなく、人間が判読できる方法で表示して、URL を「より美しく」しようとします。これは開発者にとっては悪いことですが、エンドユーザーにとっては良いことです。
たとえば、Firefox のアドレス バーに次の URL を入力すると、次のようになります。
http://tests/temp/temp.php?a=hello%2C%20world
を押すと 入力 キー、自動的に変換されます
http://tests/temp/temp.php?a=hello%2C%20world
あなたのやり方でうまくいくなら (そして、Firebug でエンコードされた URL が表示されているので、おそらく機能していると思われます), 大丈夫です ;-)