PHP - strtolower atlamak için Function () değişken içeriyorsa "wikipedia.org"

4 Cevap php

Benim site kullanıcıların bir veritabanına URL'leri girmek için izin verir. Ben kod kullanıyorum "$ site = strtolower ($ site);" bu URL'lerin küçük harflerden yapmak.

Ancak, ben sadece Vikipedi URL'ler harf duyarlı olduğunu fark, bu yüzden kullanmaktan kaçınmak istiyorum "$ site = strtolower ($ site);" Wikipedia URL'ler üzerinde, "wikipedia.org" içeren tüm bunlar.

Nasıl adım üzerinden atlamak bir fonksiyon yazabiliriz "$ site = strtolower ($ site);" $ site "wikipedia.org" içeriyor? eğer

Teşekkür peşin,

John

4 Cevap

* Nix sunuculardaki tüm URL'ler harfe duyarlıdır. Windows sunucuları üzerinde bazı URL'ler de harfe duyarlıdır.

Edit: alan adı harf duyarsız (aslında, müşteri küçük harfe dönüştürür) 'dir.

http://user:pass@domain.com/somedir/somefile.ext?someQueryString=someValue#fragment
=======----------==========--------------------------------------------------------

Legend:
    - : Case sensitive
    = : Case insensitive

Note: şartname fragmanları By harf duyarlı olması gerekiyordu ama tüm istemciler üzerinde bu şekilde uygulanmadı.

Bu yapmak için çalışıyoruz ne yapmak için çok kötü bir fikirdir. Iyi yolu, sadece alan adı küçük harfe olacaktır.

Edit 2: İstediğin yana, burada düzgün verilen bir URL (şema ve etki alanı sadece) küçük harfe bir fonksiyonudur:

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)

Bir URL küçük harflerle. Başarısızlık durumunda döner FALSE . İade başarı URL küçük harfli.

Örnek:

echo urltolower('HTTP://en.WikiPedia.org/wiki/PHP');
//echo's http://en.wikipedia.org/wiki/PHP
if(stristr($site, 'wikipedia.org') === FALSE){
 echo "doesn't contain wikipedia.org";
}else{
 echo "wikipedia.org!";
}

Update

Veritabanındaki adresler saklanması ile ilgili kısa bir not. Bu büyük harf karakterlerini içeren bir sunucu üzerinde bir dizin, dosya, kullanıcı adı, şifre veya parametre için nadir değildir. Yorumlama yatan işletim sistemi, web sunucusu ve ben şiddetle belki etki ve protokol dışında herhangi bir şey için strtolower () kullanmak tavsiye ederim koduna bağlıdır rağmen.

Bu kötü bir fikir. Genel URL'ler harfe duyarlı olması için izin verilir, bu yüzden neden bilgi atmak istiyorsunuz? Bunu yaparsanız, istisnasız sonra durum eklemek gerekir.

Bir dize içinde başka herhangi bir noktada varsa stripos() söyleyecektir. Kontrol edin ve orada değilse, strtolower () güvenli olacaktır.