質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

1698閲覧

PHPでURLを検証したいです

gasorin

総合スコア15

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

1クリップ

投稿2020/09/23 00:33

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の検証はよくあると思ったのですが、みなさんどのようにしていらっしゃいますか?

concealer👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/09/23 00:38

どういう検証をしたいのでしょうか。 OKパターンNGパターン 想定しているパターンを一通り出された方が良いかと思いますが。
gasorin

2020/09/23 14:07

なるほど、たしかにわかりにくいですね。整理してみます。
guest

回答1

0

質問の意図がわかりません、urlチェックなのですから不正な日本語が
はじかれるのは必須だと思います。
逆にurlエンコードしたらすべて通っちゃいますよね?意味がありません

投稿2020/09/23 00:49

yambejp

総合スコア114839

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gasorin

2020/09/23 07:06

すべて通っちゃいますか?よくわからないのですが、すると日本語URLの検証をyambejp様ならどういたしますか?質問の日本語のURLは実際に存在するものなので、検証は通したいのですけど。。
gasorin

2020/09/25 12:30 編集

こんにちは。あれから仰る問題がわからないまま、自分で考えて次のように日本語エンコードを挟んでみたのですが、これですとやはり問題ございますでしょうか。 https://ideone.com/oHNXt9 入力値なのでとても心配で、お忙しい中申し訳ありませんが、できればアドバイスいただけますと幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問