PHPでURLを検証したいのですが、いい方法ございませんでしょうか。
※URLは「http://」や「https://」です。
###発生している問題
多言語URLへの対応ができません。
該当のソースコード
これは $url1 だと検証できます。
しかし $url2 だとできません。
php
1$url1 = 'https://example.com/posts/1013%E3%82%86%E3%82%8B%E3%83%BC%E3%82%8A%E3%83%BCmb/'; 2$url2 = 'https://example.com/posts/1013ゆるーりーmb/'; 3var_dump(is_url($url1)); 4var_dump(is_url($url2)); 5function is_url($url){ 6 return false !== filter_var($url, FILTER_VALIDATE_URL) && preg_match("[^https?+://]i", $url); 7}
試したこと
日本語だとできないのだと考えました。
そこでurlencodeをかけますと、「://」までエンコードされてしまいできませんでした。
php
1function is_url($url){ 2 $url = urlencode($url); 3 return false !== filter_var($url, FILTER_VALIDATE_URL) && preg_match("[^https?+://]i", $url); 4}
なのでさらに「://」にもエンコードしたのですがこれでもできません。
php
1function is_url($url){ 2 $url = urlencode($url); 3 $double_slash = urlencode('://'); 4 return false !== filter_var($url, FILTER_VALIDATE_URL) && preg_match("[^https?+$double_slash]i", $url); 5}
URLの検証はよくあると思ったのですが、みなさんどのようにしていらっしゃいますか?