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

时间:2009-06-26 00:23:46

标签: php string

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

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

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

提前致谢,

约翰

5 个答案:

答案 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条件可以解决您的问题。 根据您的要求设置条件