我的网站允许用户将URL输入数据库.我使用的代码是"$ site = strtolower($ site);" 使所有这些URL小写.
但是,我刚刚意识到维基百科URL是区分大小写的,所以我想避免使用"$ site = strtolower($ site);" 在Wikipedia网址上,所有网址都包含"wikipedia.org".
我怎么能编写一个跳过"$ site = strtolower($ site);"步骤的函数 如果$ site包含"wikipedia.org"?
提前致谢,
约翰
*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)