2016-08-05 9 views
1

私のウェブサイトには、人々がURLアドレスを送信できるテキストボックスがあります。入力から基本WebサイトのURLを取得

http://www.website.com?id=1 
http://www.website.com/#/gls 
http://www.website.com/post/test 

をしかし、私はこの意味、彼らのベースURLを入力します:ほとんどの時間のような間違ったURLのを入力しhttp://www.website.com

私はこの私が彼らのURLアドレスが中に保存されていることを考慮すると達成することができますどのように$url変数?

私はいくつかの理想を持っていますが、それは非常に良い解決策ではないと思います。例えば、私は "。"の後にドメインを分割することを考えました。その後、uselesコードの残りの部分を使用せずにドメイン拡張を取得します。

+0

'$ _SERVER'を見てください – ArtisticPhoenix

+0

これはどうすれば私を助けますか? $ _SERVERはPHP変数とは何の関係もなく、何もありません。あなたはその質問を読んだことがありますか? – paulalexandru

+2

@DiegoとArtisiticPhoenix OPは、ユーザー入力の*文字列(現在のWebサイトのベースURLではありません)を指しています。 –

答えて

2

あなたは、彼らがこのように入力したものに必要な部品を取り出し、それを比較するために、むしろ正規表現よりもparse_urlを使用することができます。

// Get each part of the URL 
$parts = parse_url($url); 

// Rebuild the URL with only the scheme and domain (Without path, fragment, query string etc.) 
$expected = $parts['scheme'] . '://' . $parts['host']; 

// Compare the expected URL with what they user has entered. 
if ($expected != $url) { 
    // Do something 
} 
+0

ニースと簡単な例。 +1 –

2

PHP_URL_HOSTパラメータでPHP parse_url() functionを使用することができます。そのよう

parse_url($url, PHP_URL_HOST); 

これはURL http://www.example.com/testためwww.example.comを返します。

また、同様の方式を含めることは、次のことを試すことができます。

parse_url($url, PHP_URL_SCHEME) . "://" . parse_url($url, PHP_URL_HOST); 

これはURL http://www.example.com/testためhttp://www.example.comを返します。


あなたは(あなたがタグを提案してきたように)無効な文字がでている任意のうち最初の(ほかhttp://中)/または#または?、前のセクションを返すについては、正規表現を使用したい場合は

ベースURL?ベースの後のURLの部分は、これらの文字のいずれかで始まる必要があります。

ので、同じように:

preg_match("/^http:\/\/[^\/\?\#]+/", $url) 
0

このバージョンはhttpsで動作します。

最初の括弧はベースURLを取得します。

preg_match("/^(https?:\/\/.+)(\/|#|\?|)/U", $url, $anArray) 
// Access to the base url 
$anArray[1] 
+0

正規表現の途中にある '/'(バックスラッシュ)をエスケープするか、デリミタとして扱います –

+0

ありがとう、訂正しました。 – Mylainos

関連する問題