Php 将www添加到字符串中的url

Php 将www添加到字符串中的url,php,url,Php,Url,我正在尝试将www添加到php url,但我发现我的代码在某些情况下无法正常工作: $url="http://example.com"; $url=str_replace(array("http://www.","https://www."),array("http://","https://"),$url); $url=str_replace(array("http://","https://"),array("http://www.","https://www."),$url); echo

我正在尝试将www添加到php url,但我发现我的代码在某些情况下无法正常工作:

$url="http://example.com";
$url=str_replace(array("http://www.","https://www."),array("http://","https://"),$url);
$url=str_replace(array("http://","https://"),array("http://www.","https://www."),$url);
echo $url; //http://www.example.com
但在这种情况下:

$url="https://www.example.com/href.php?redir=http://other-nonwww-server.com";
$url=str_replace(array("http://www.","https://www."),array("http://","https://"),$url);
$url=str_replace(array("http://","https://"),array("http://www.","https://www."),$url);
echo $url; //https://www.example.com/href.php?redir=http://www.other-nonwww-server.com

它更改了请求。

当PHP提供正确的URL解析方法时,不要使用字符串操作方法:

这样做:

<?php
$url="https://example.com:8080/href.php?redir=http://other-nonwww-server.com";

$bits = parse_url($url);

$newHost = substr($bits["host"],0,4) !== "www."?"www.".$bits["host"]:$bits["host"];

$url2 = $bits["scheme"]."://".$newHost.(isset($bits["port"])?":".$bits["port"]:"").$bits["path"].(!empty($bits["query"])?"?".$bits["query"]:"");;

print_r($url2);

例如,这似乎没有考虑带有端口的URL。
https://www.example.com:8080/href.php?redir=http://other-nonwww-server.com