修剪www。和http://最佳做法

时间:2013-12-30 15:49:53

标签: php trim

我的代码有效,我只是想知道它是不是很糟糕的做法,因为我想是这样。我尝试了所有preg_replace但它似乎没有工作。所以我就是这样写的。

作为一个输入,我期待url

  

google.com www.google.com http://google.com

     

     

http://www.google.com

因此我需要

google.com

我的代码:

 $website = trim($website); //removes space characters
                        $website = trim($website, '/');
                        $website = trim($website, 'http://');
                        $website = trim($website, 'www.');

3 个答案:

答案 0 :(得分:5)

trim的工作方式是修剪每个角色(www..w相同)。

您正在使用preg_replace的正则表达式查找^(https?://)?(www\.)?

$website = preg_replace('~^(https?://)?(www\.)?~i', '', $website);

Regular expression visualization

Debuggex Demo

<强>尸检

  • ^比赛必须从此后的任何内容开始(确保我们只在比赛开始时才替换)
  • (https?://)?
    • http - 文字字符串http
    • s? - 可选s(如果我们使用https
    • :// - 文字字符串://
    • ? - 让整个事情变得可选
  • (www\.)?
    • www\. - 文字字符串www.(您需要将.转义为\..表示&#34;任何字符&#34; )
    • ? - 让整个事情变得可选
  • i - 这是修饰符,i使整个事情区分大小写(将匹配HTTP和http)

Regex 101 Demo

答案 1 :(得分:2)

KIS:保持简单。

http://www.php.net/parse_url

来自文档:

<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';

print_r(parse_url($url));

echo parse_url($url, PHP_URL_PATH);
?>

Array
(
    [scheme] => http
    [host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)

编辑: PHP Getting Domain Name From Subdomain当你有主人时。

答案 2 :(得分:0)

RegEx的经典用例。此代码段会删除http(s)和www前缀。

  

$ new_url = preg_replace('/(?:https?://)?(?:www。)?(。*)/?$ / i','$ 1',   $网址);