我的网站允许用户将URL输入数据库。我使用的代码是“$ site = strtolower($ site);”将所有这些网址设为小写。
但是,我刚刚意识到维基百科网址区分大小写,所以我想避免使用“$ site = strtolower($ site);”在Wikipedia网址上,所有网址都包含“wikipedia.org”。
我怎么能编写一个跳过“$ site = strtolower($ site);”步骤的函数如果$ site包含“wikipedia.org”?
提前致谢,
约翰
答案 0 :(得分:9)
* nix服务器上的所有URL都区分大小写。 Windows服务器上的某些URL也区分大小写。
编辑:域名不区分大小写(实际上,客户端会将其转换为小写)。
http://user:pass@domain.com/somedir/somefile.ext?someQueryString=someValue#fragment
=======----------==========--------------------------------------------------------
Legend:
- : Case sensitive
= : Case insensitive
注意:根据规范,片段应该区分大小写,但不会在所有客户端上实现。
这是一个非常糟糕的想法,做你想做的事情。最好的方法是将域名小写。
编辑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;
}
<强> [mixed] urltolower($url)
强>
缩小网址。失败时返回 FALSE
。成功时返回小写的URL。
示例:
echo urltolower('HTTP://en.WikiPedia.org/wiki/PHP');
//echo's http://en.wikipedia.org/wiki/PHP
答案 1 :(得分:3)
if(stristr($site, 'wikipedia.org') === FALSE){
echo "doesn't contain wikipedia.org";
}else{
echo "wikipedia.org!";
}
<强>更新强>
关于在数据库中存储网址的简短说明。服务器上的目录,文件,用户名,密码或参数包含大写字符的情况并不少见。虽然解释依赖于底层操作系统,网络服务器和代码,但我强烈建议不要使用strtolower()来处理除域和协议之外的任何内容。
答案 2 :(得分:1)
这是一个坏主意。一般来说,URL允许区分大小写,那么为什么要丢弃信息呢?如果这样做,则必须在异常后添加异常。
答案 3 :(得分:0)
stripos()会告诉您字符串是否存在于另一个字符串中的任何位置。检查一下,如果不存在,strtolower()将是安全的。
答案 4 :(得分:0)
制作一个简单的If条件可以解决您的问题。 根据您的要求设置条件