在IF语句中删除HTTP / HTTPS / WWW

时间:2017-10-31 22:39:00

标签: php wordpress

在我的网站上有一个用户可以输入网址的前端上传器。所以我创建了一个IF语句来显示他们是否输入了一个URL(可点击),如果他们不输入则没有。现在我试图删除httphttpswww(如果存在)(尝试实现https // www.link.com> link.com),但不知道放在哪里。假设我使用str_replace函数。

<a href="<?php

if ( get_post_meta($post->ID, 'user_submit_url',true) ) {

    echo get_post_meta($post->ID, 'user_submit_url',true);

} else {}?>" target="_blank">

<?php

if ( get_post_meta($post->ID, 'user_submit_url',true) ) {

    echo get_post_meta($post->ID, 'user_submit_url',true);

} else {}?></a>

非常感谢任何见解!

2 个答案:

答案 0 :(得分:1)

也许不是最佳解决方案,但您可以使用preg_replace来定义与http和www匹配的模式。

var_dump(preg_replace("#https?:\/\/(www)?\.?#i","","https://www.test.de"));
像这样的事情。另一种解决方案是使用parse_url这样的东西:

var_dump(parse_url("https://www.test.de", PHP_URL_HOST));

但是你必须删除www,因为它是主机的一部分。

答案 1 :(得分:1)

为什么不创建像get_user_submit_url这样的功能,让您的代码更清晰。

function get_user_submit_url(){
    if ( get_post_meta($post->ID, 'user_submit_url',true) ) {
        $user_url = get_post_meta($post->ID, 'user_submit_url',true);
        // Strip domain here
        // Not sure if you only need full path URL or only domain, so I only get the domain
        $user_domain = preg_replace('#^www\.(.+\.)#i', '$1', $parse_url($user_url)['host']);
    }
    return $user_domain;
}

所以你的HTML将是:

<a href="<?php echo get_user_submit_url(); ?>" target="_blank">
    <?php echo get_user_submit_url(); ?>
</a>