たとえば、次の URL を入力します。
http://www.example.com/
そして、私はそれが私を返すことを望みます:
http://www.example.com
URLをそのようにフォーマットするにはどうすればよいですか? これを行うための組み込みの PHP 関数はありますか?
これはそれを行う必要があります:
$url = 'http://parkroo.com/';
if ( substr ( $url, 0, 11 ) !== 'http://www.' )
$url = str_replace ( 'http://', 'http://www.', $url );
$url = rtrim ( $url, '/' );
これはうまくいくはずです:
$urlInfo = parse_url ( $url );
$newUrl = $urlInfo['scheme'] . '://';
if ( substr ( $urlInfo['host'], 0, 4 ) !== 'www.' )
$newUrl .= 'www.' . $urlInfo['host'];
else
$newUrl .= $urlInfo['host'];
if ( isset ( $urlInfo['path'] ) && isset ( $urlInfo['query'] ) )
$newUrl .= $urlInfo['path'] . '?' . $urlInfo['query'];
else
{
if ( isset ( $urlInfo['path'] ) && $urlInfo['path'] !== '/' )
$newUrl .= $urlInfo['path'];
if ( isset ( $urlInfo['query'] ) )
$newUrl .= '?' . $urlInfo['query'];
}
echo $newUrl;
ライブデモ
<?php
function changeURL($url){
if(empty($url)){
return false;
}
else{
$u = parse_url($url);
/*
possible keys are:
scheme
host
user
pass
path
query
fragment
*/
foreach($u as $k => $v){
$$k = $v;
}
//start rebuilding the URL
if(!empty($scheme)){
$newurl = $scheme.'://';
}
if(!empty($user)){
$newurl.= $user;
}
if(!empty($pass)){
$newurl.= ':'.$pass.'@';
}
if(!empty($host)){
if(substr($host, 0, 4) != 'www.'){
$host = 'www.'. $host;
}
$newurl.= $host;
}
if(empty($path) && empty($query) && empty($fragment)){
$newurl.= '/';
}else{
if(!empty($path)){
$newurl.= $path;
}
if(!empty($query)){
$newurl.= '?'.$query;
}
if(!empty($fragment)){
$newurl.= '#'.$fragment;
}
}
return $newurl;
}
}
echo changeURL('http://yahoo.com')."<br>";
echo changeURL('http://username:password@yahoo.com/test/?p=2')."<br>";
echo changeURL('ftp://username:password@yahoo.com/test/?p=2')."<br>";
/*
http://www.yahoo.com/
http://username:password@www.yahoo.com/test/?p=2
ftp://username:password@www.yahoo.com/test/?p=2
*/
?>
parse_url を使用して URL の一部を取得し、URL を作成できます。またはさらに簡単に、trim(' http://example.com/ ', '/');