【问题标题】:Removing "http://" from a string [duplicate]从字符串中删除“http://”[重复]
【发布时间】:2014-01-18 18:33:12
【问题描述】:

我有一个 PHP 脚本可以从用户输入的 url 字符串中删除“http://”。

我的脚本:

$url= "http://techcrunch.com/startups/";
$url = str_replace('http://', '', $url);

结果:

$url= techcrunch.com/startups/

这很好用,只是有时 url 用“https://”代替。有没有办法可以删除域名之前的所有内容,不管它是什么?

【问题讨论】:

标签: php


【解决方案1】:

试试这个:

$url = 'http://techcrunch.com/startups/';
$url = str_replace(array('http://', 'https://'), '', $url);

编辑:

或者,一种始终删除协议的简单方法:

$url = 'https://www.google.com/';
$url = preg_replace('@^.+?\:\/\/@', '', $url);

【讨论】:

  • 这不是在回答问题。用户说:有没有什么办法可以去掉域名前面的所有东西,不管是什么?
  • 这回答了如何去除http和https的问题,并给出了如何快速添加更多协议的一个很好的例子。
  • @kirk 虽然这是他的话,但用户的意图似乎只是删除 http 和 https。
  • @JAL:谢谢,至少你看到了同样的东西……
  • @NeoNexusDeMortis 我确实看到了这一点,但作为这个社区的一部分,我们希望提供完整的答案。不只是想到什么,您的第二个答案不适用于techcrunch.com/startups/?redirect=https://test.com。它只返回test.com
【解决方案2】:

应该这样做:

$url = preg_replace("|^.+?://|", "", $url);

删除 :// 之前的所有内容,包括 ://

【讨论】:

  • @Glavić:很好的收获!修复。对于非贪婪的+,它只会赶上第一个://
【解决方案3】:

preg_replace 中使用look behinds 来删除// 之前的任何内容。

preg_replace('(^[a-z]+:\/\/)', '', $url);

只有在字符串开头找到才会替换,如果后面找到则忽略

【讨论】:

【解决方案4】:
preg_replace('/^[^:\/?]+:\/\//','',$url);

一些结果:

input: http://php.net/preg_replace
output: php.net/preg_replace

input: https://www.php.net/preg_replace
output: www.php.net/preg_replace

input: ftp://www.php.net/preg_replace
output: www.php.net/preg_replace

input: https://php.net/preg_replace?url=http://whatever.com
output: php.net/preg_replace?url=http://whatever.com

input: php.net/preg_replace?url=http://whatever.com
output: php.net/preg_replace?url=http://whatever.com

input: php.net?site=http://whatever.com
output: php.net?site=http://whatever.com

【讨论】:

    【解决方案5】:
    $new_website = substr($str, ($pos = strrpos($str, '//')) !== false ? $pos + 2 : 0);
    

    这将删除“//”之前的所有内容。

    编辑

    这个是经过测试的。改用strrpos()strpos()

    【讨论】:

    • 以这种方式替换字符串不是一个好主意。您假设所有用户都会总是在输入中正确输入 URL。只需一个用户输入“http:///www.amazon.com”之类的 URL 即可破解此代码。始终假设用户输入了无效代码,并尽可能编写最健壮的代码
    • 如果用户输入如下网址怎么办:techcrunch.com/startups/?redirect=https://test.com
    • 感谢@Glavić,另一个很好的例子。
    • 另外,你从哪里获得 80% 的数字?说真的,这不过是编造的。
    • 我不是在挑剔你。我在批评你的代码。这就是这个网站的全部内容。如果您不想听,并想更多经验丰富的程序员的指导,那么您将在编程领域陷入困境。
    猜你喜欢
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2013-11-22
    • 2020-03-30
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多