PHP - 如果变量包含"wikipedia.org",则跳过strtolower()的函数

0 php string

我的网站允许用户将URL输入数据库.我使用的代码是"$ site = strtolower($ site);" 使所有这些URL小写.

但是,我刚刚意识到维基百科URL是区分大小写的,所以我想避免使用"$ site = strtolower($ site);" 在Wikipedia网址上,所有网址都包含"wikipedia.org".

我怎么能编写一个跳过"$ site = strtolower($ site);"步骤的函数 如果$ site包含"wikipedia.org"?

提前致谢,

约翰

And*_*ore 9

*nix服务器上的所有URL都区分大小写.Windows服务器上的某些URL也区分大小写.

编辑:域名不区分大小写(实际上,客户端将其转换为小写).

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

Legend:
    - : Case sensitive
    = : Case insensitive
Run Code Online (Sandbox Code Playgroud)

注意:根据规范,片段应该区分大小写,但不会在所有客户端上以这种方式实现.

做你想做的事情是个坏主意.最好的方法是将域名小写.

编辑2:因为你问过,这里有一个函数可以正确地小写给定的URL(仅限方案和域):

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;
}
Run Code Online (Sandbox Code Playgroud)

[mixed] urltolower($url)

缩小URL.FALSE失败时的回报.成功时返回小写的URL.

例:

echo urltolower('HTTP://en.WikiPedia.org/wiki/PHP');
//echo's http://en.wikipedia.org/wiki/PHP
Run Code Online (Sandbox Code Playgroud)