$url="http://www.example.com/日本語/こんにちは.html";
$result=filter_var(urlencode($url), FILTER_VALIDATE_URL);
私はURLをエンコードしています!それでは、なぜ$return
false
ですか?urlencodeでもphp - filter_varがfalseを返す
$url="http://www.example.com/日本語/こんにちは.html";
$result=filter_var(urlencode($url), FILTER_VALIDATE_URL);
私はURLをエンコードしています!それでは、なぜ$return
false
ですか?urlencodeでもphp - filter_varがfalseを返す
urlencode
を使用して、クエリパラメータ値をエンコードします。これは、URLで特別な意味を持つ文字をエンコードし、あなたが全体のURLをエンコードした場合など:
、/
、?
、
のような - クエリ]セクションの値とは対照的に、 - それはもはや有効なURLではありません。
あなたがそれをエンコードした後、これがあなたのURLです:
http%3A%2F%2Fwww.example.com%2F%E6%97%A5%E6%9C%AC%E8%AA%9E%2F%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF.html
それはおそらく有効なURLではありませんので:ドキュメントから
http://php.net/manual/de/filter.filters.validate.php
:
を検証値(» http://www.faqs.org/rfcs/rfc2396に応じて)URLなど、必要に応じて必要な コンポーネントと。有効なURLがHTTPプロトコル http://を指定していない可能性があることに注意してください。 は予想されるプロトコルを使用します。 ssh://またはmailto:。 関数では、ASCII URLが有効であることがわかります。国際化 ドメイン名(非ASCII文字を含む)は失敗します。
URLエンコードされたURLは、urlencodeが無効な文字をURLに追加するため、常に失敗します。この関数は、中国語の文字を含むURLの検証用ではありません。
特に最後の行は正確に言います: 関数では、ASCII URLが有効であることがわかります。国際化 ドメイン名(非ASCII文字を含む)は失敗します。
編集:@jeroenは右です。btw urlencode()
は、URL全体ではなくパラメータをエンコードするためのものです。
URLは 'http://example.com/%E6%97%A5%E6%9C%AC%E8%AA%にする必要があります9E /%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF.html'。無効なURLだけを開始点として持つ事実の後に簡単な関数呼び出しで簡単に修正することはできません。 – deceze
@decezeこれはまだフィルタでは無効です。 – Blackbam
@Blackbam ...? https://3v4l.org/POAWp – deceze