3

我在执行以下操作时遇到了一些麻烦..

http://www.google.com --> www.google.com/
https://google.com --> www.google.com/
google.com --> www.google.com/

我正在尝试删除https:// or http://,确保将www.其添加到 URL 的开头,然后在 URL 不存在时添加尾部斜杠。

感觉好像我已经弄清楚了大部分,但我无法按照自己的意愿str_replace()工作。

据我了解,这是如何使用str_replace

$string = 'Hello friends';
str_replace('friends', 'enemies', $string);
echo $string;
// outputs 'Hello enemies' on the page

这是我到目前为止所拥有的:

$url = 'http://www.google.com';

echo reformat_url($url);

function reformat_url($url) {
    if ( substr( $url, 0, 7 ) == 'http://' || substr( $url, 0, 8 ) == 'https://' ) { // if http:// or https:// is at the beginning of the url
        $remove = array('http://', 'https://');
        foreach ( $remove as $r ) {
            if ( strpos( $url, $r ) == 0 ) {
                str_replace($r, '', $url); // remove the http:// or https:// -- can't get this to work
            }
        }
    }
    if ( substr( $url, 0, 4 ) != 'www.') { // if www. is not at the beginning of the url
        $url = 'www.' . $url; // prepend www. to the beginning
    }
    if ( substr( $url, -1 ) !== '/' ) { // if trailing slash does not exist
        $url = $url . '/';  // add trailing slash
    }
    return $url; // return the formatted url
}

任何有关格式化 URL 的帮助将不胜感激;我也很好奇我在使用 str_replace 删除 http:// 或 https:// 时做错了什么。如果有人可以就我做错了什么提供一些见解,我们将不胜感激。

4

4 回答 4

5

试试parse_url()

返回值

在严重格式错误的 URL 上,parse_url()可能返回 FALSE。

如果省略 component 参数,则返回关联数组。至少一个元素将出现在数组中。此数组中的潜在键是:

  • scheme- 例如http
  • host
  • port
  • user
  • pass
  • path
  • query- 在问号之后?
  • fragment- 在井号之后#

因此,您可以使用以下代码访问域:

$url = "https://www.google.com/search...";
$details = parse_url($url);
echo($details['host']);
于 2012-10-18T16:52:24.110 回答
4

$url = str_replace($r, '', $url);

代替

str_replace($r, '', $url);

因为str_replace返回一个新字符串;它没有改变$url

于 2012-10-18T16:55:48.053 回答
1
$url = str_replace('http://', '', $url);
$url = str_replace('https://', '', $url);
if(substr( $url, 0, 4 ) != 'www.')
{
    $url = 'www.'.$url;
}
$length = strlen($url);
if($url[$length-1] != '/')
$url = $url.'/';
于 2012-10-18T18:01:35.177 回答
1
public static function formatURLs($t) {
    $t = ' '.$t;
    $t = preg_replace("#([\s]+)([a-z]+?)://([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]+)#i", "\\1<a href=\"\\2://\\3\" rel=\"nofollow\" target=\"_blank\">\\3</a>", $t);
    $t = preg_replace("#([\s]+)www\.([a-z0-9\-]+)\.([a-z0-9\-.\~]+)((?:/[a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]*)?)#i", "\\1<a href=\"http://www.\\2.\\3\\4\" rel=\"nofollow\" target=\"_blank\">\\2.\\3\\4</a>", $t);
    $t = preg_replace("#([\s]+)([a-z0-9\-_.]+)@([\w\-]+\.([\w\-\.]+\.)?[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $t);
    $t = substr($t, 1);
    return $t;
}

我的功能,希望会有所帮助

于 2014-06-18T19:17:51.807 回答