使用PHP格式化URL - http://www.google.com到www.google.com/;也有str_replace()的问题

时间:2012-10-18 16:50:01

标签: php url str-replace substr

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

  

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

我尝试删除https:// or http://,确保将www.添加到网址的开头,然后在网址中添加一个尾随斜杠(如果不存在)。

感觉我已经把大部分内容弄清楚,但我无法让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 个答案:

答案 0 :(得分:5)

尝试parse_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']);

答案 1 :(得分:4)

待办事项

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

而不是

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

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

答案 2 :(得分: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.'/';

答案 3 :(得分: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;
}

我的功能,希望有所帮助