4

私が理解していることから、( $_GET) URL を取得した後、%20 は既にスペースに変換されています。そのため、関数を使用するfilter_var($url, FILTER_SANITIZE_URL)と、既に変換されたスペースが削除されます。

これを回避し、上記の機能を引き続き使用するにはどうすればよいですか?

または、単に使用する必要がありますstr_replace()か? との組み合わせではうまくいかないようですがfilter_var($url, FILTER_SANITIZE_URL)

4

5 に答える 5

0

スペースを保持する FILTER_SANITIZE_URL を使用し続ける方法の 1 つは、最初にスペースを隣り合う可能性が低い 2 つの許可された文字で置き換え、その後それらをスペースに戻すことです。

例えば

str_replace('\/', ' ', filter_var(str_replace(' ', '\/', $url), FILTER_SANITIZE_URL));

\/注意:がその最適な候補であるかどうかは正確にはわかりません。しかし、私は安全なコンテキストでそれを使用しました。

于 2014-10-15T00:43:39.017 に答える
0

filter_var を呼び出す前に、urlencode($url) を使用できます。

$url をフィルタリングしようとしているのはなぜですか?

于 2012-11-28T23:44:05.067 に答える
0

したがって、この場合、$urlin ?$_GET['url']filter_var

これらの URL にスペースが含まれる場合は、 で使用できる生のクエリ文字列を直接操作することをお勧めします$_SERVER['QUERY_STRING']。もちろん、これは、探しているパラメーターを手動で解析する必要があることを意味します (おそらく使用explode('&')-parse_str()に対して行われたのと同じ変換を行うため、使用しないでください$_GET()) 。

于 2012-11-28T23:45:58.053 に答える
0

%20URL の は、元の値の一部であるため、スペースに変換しないでください。それらがデコードされている場合は、URL での転送中に値を正しくエンコードできなかったことを意味します。

URL で転送する値:

My string with spaces & special characters

URL では、これを次のようにエンコードする必要があります。

My%20string%20with%20spaces%20%26%20special%20characters

最終 URL:

http://example.com?foo=My%20string%20with%20spaces%20%26%20special%20characters

これは、URL でクエリ パラメータとして転送する値です。つまり、次のように適切にエンコードする必要があります。

http%3A%2F%2Fexample.com%3Ffoo%3DMy%2520string%2520with%2520spaces%2520%2526%2520special%2520characters

最終的な最終 URL:

http://my-service.example.com?url=http%3A%2F%2Fexample.com%3Ffoo%3DMy%2520string%2520with%2520spaces%2520%2526%2520special%2520characters

PHPはこれを一度デコードすると、次の$_GET['url']ことがわかります。

http://example.com?foo=My%20string%20with%20spaces%20%26%20special%20characters
于 2016-04-06T07:19:45.923 に答える