2009-06-26 10 views
0

私のサイトでは、ユーザーはURLをデータベースに入力できます。私はコード "$ site = strtolower($ site);"を使用しています。これらのURLをすべて小文字にする必要があります。PHP - 変数に "wikipedia.org"が含まれているとstrtolower()をスキップする関数

しかし、私はWikipediaのURLが大文字と小文字を区別していることに気付いたので、 "$ site = strtolower($ site);"を使用しないでください。 WikipediaのURLには、すべて "wikipedia.org"が含まれています。

「$ site = strtolower($ site);」という手順をスキップする関数を作成するにはどうすればよいですか? $ siteに "wikipedia.org"が含まれていれば?事前に

おかげで、

ジョン

+0

Wwikipediaのリンクでは大文字と小文字が区別されますか?彼らは大文字と小文字を区別しないようです... –

+3

ほとんどのURLは大文字小文字を区別しますが、Windowsサーバでホストされているものが例外です。私は最初は悪い考えだと思う。 URLを元のケースに保存するとどうなりますか? –

+4

パスはすべてのURLで大文字と小文字が区別されることを認識しています。大文字小文字を間違えた場合、ほとんどのサーバーが正しいことを行うのは偶然の問題です。 –

答えて

0

stripos()文字列が別の内の任意の時点で存在しているかどうかを教えてくれます。それをチェックし、もしそこになければ、strtolower()は安全です。データベース内のURLを保存するに

3
if(stristr($site, 'wikipedia.org') === FALSE){ 
echo "doesn't contain wikipedia.org"; 
}else{ 
echo "wikipedia.org!"; 
} 

更新

だけ短いメモ。サーバ上のディレクトリ、ファイル、ユーザ名、パスワード、またはパラメータが大文字を含むことは珍しくありません。解釈は根底にあるOS、Webサーバー、コードに依存しますが、strtolower()をドメインやプロトコル以外のものに使用しないことを強くお勧めします。

+0

ニースは、 "stristr"機能があることを知らなかった –

9

* nixサーバーのすべてのURLでは、大文字と小文字が区別されます。 Windowsサーバー上の一部のURLでは、大文字と小文字が区別されます。

編集:ドメイン名は大文字と小文字を区別しません(実際には、クライアントは小文字に変換します)。

http://user:[email protected]/somedir/somefile.ext?someQueryString=someValue#fragment 
=======----------==========-------------------------------------------------------- 

Legend: 
    - : Case sensitive 
    = : Case insensitive 

注:仕様断片によっては、大文字と小文字を区別することになっているが、それはすべてのクライアントにそのように実装されていません。

これは、あなたがしようとしていることを行うのは非常に悪い考えです。ドメイン名を小文字にするのが最善の方法です。

編集2:

function urltolower($url) { 
    $parts = @parse_url($url); 
    if($parts === FALSE) return FALSE; 
    $url = ''; 

    if(!empty($parts['scheme'])) $url .= strtolower($parts['scheme']) . (($parts['scheme'] == 'file') ? ':///' : '://'); 
    if(!empty($parts['user'])) $url .= $parts['user'] . ((!empty($parts['pass'])) ? ':' . $parts['pass'] : '') . '@'; 
    if(!empty($parts['host'])) $url .= strtolower($parts['host']); 
    if(!empty($parts['port'])) $url .= ':' . $parts['port']; 
    if(!empty($parts['path'])) $url .= $parts['path']; 
    if(!empty($parts['query'])) $url .= '?' . $parts['query']; 
    if(!empty($parts['fragment'])) $url .= '#' . $parts['fragment']; 

    return $url; 
} 

[mixed] urltolower($url)

はURLを小文字に:あなたが尋ねたので、ここで適切に指定されたURLを小文字になる機能(スキームのみとドメイン)です。失敗した場合、FALSEを返します。成功すると小文字のURLを返します。

例:

echo urltolower('HTTP://en.WikiPedia.org/wiki/PHP'); 
//echo's http://en.wikipedia.org/wiki/PHP 
+0

私のサイトはUnixサーバー上でホストされていると思うし、アドレスバーにすべての文字を入力すると、サイト名は小文字で少なくともGoogle Chromeで)。 –

+0

@ John:これは、サーバーがmod_spelまたは同等のものを使用するように構成されている場合にのみ発生します。これは非共通です。 –

+1

@ John:ドメイン名は大文字と小文字を区別しません。ドメイン名がexample.comで、test.txtというファイルがあるとします。 EXAMPLE.COM/test.txtは動作し、EXAMPLE.COM/Test.txtは実行されません.example.com/Text.txtはexample.com/test.txtになりません。 –

1

これは悪い考えです。 URLは大文字と小文字を区別することが許可されているので、なぜ情報を捨てるのですか?これを行う場合は、例外の後に例外を追加する必要があります。

+0

ウィキペディア以外のすべてのURLは大文字と小文字を区別しないようです。 NYTIMES.comで入力してみると、nytimes.comにリダイレクトされます。 –

+1

すべてのドメインは大文字と小文字を区別しませんが、これはすべてのURLでは当てはまりませんが、 –

+0

ジョン、ドメインは大文字と小文字を区別しません(http://WIKIPEDIA.ORGもhttp://wikipedia.orgにアクセスします)。パスはありません。 –

0

単純なIf条件を作成すると問題が解決されます。 要件の条件を設定してください

関連する問題