我有一个函数,我想从字符串中删除部分字符串。
我想删除以下可能放在域名前面的子字符串http://
ftp://
www.
www2.
。
这是代码,但它不起作用,我可能会遗漏一些非常明显的代码。
private function GetValidDomainName($domain)
{
if(strpos($domain, 'http://'))
{
$this->domain = str_replace("http://", "", $domain);
}
if(strpos($domain, 'ftp://'))
{
$this->domain = str_replace("ftp://", "", $domain);
}
if(strpos($domain, 'www.'))
{
$this->domain = str_replace("www.", "", $domain);
}
if(strpos($domain, 'www2.'))
{
$this->domain = str_replace("www2.", "", $domain);
}
$dot = strpos($domain, '.');
$this->domain = substr($domain, 0, $dot);
$this->tld = substr($domain, $dot+1);
}
这是我在WHOIS检查域名可用性时使用的第一个功能,我有功能可以填写可用的字符并允许域名长度等,它们都可以工作,检查本身工作得很好,但只是这个功能没有做到它应该做的事情。
答案 0 :(得分:1)
<强>理论值:强>
您需要查看strict comparison operator:
if(strpos($domain, 'http://') === 0)
......等等。
那是因为strpos
将返回字符串中出现的(第一个)位置,如果找不到子字符串,则返回FALSE
。
在您的情况下,我希望该方法将返回0
,意味着在开头找到子字符串,或者如果找不到则FALSE
。除非您使用严格比较运算符,否则两者都将在PHP中评估为FALSE
。
<强>实践:强>
您根本不需要进行strpos()
检查,因为str_replace()
只有在需要替换的情况下才有效。你可以使用它:
$this->domain = str_replace(array(
'http://', 'ftp://', 'www1', 'www2'
), '', $domain);
但是,除非您确保网址不会多次包含http://
(或其中一个),否则此功能无效。意味着以下网址会破坏:
http://test.server.org/redirect?url=http://server.org
为了让它稳定,我会使用preg_replace()
:
$pattern = '~^((http://|ftp://~|www1\.|www2\.))~'
$this->domain = preg_replace($pattern, '', $domain);
上面的模式只有当它们出现在字符串的开头时才会删除子字符串。