0

http://URLをorで始まるように変換するためだけに次のコードを使用していますhttps:// が、この関数は例として正確なタイプのURLで問題を引き起こします

$url = 'www.youtube.com/watch?v=_ss'; // url without http://

function convertUrl ($url){
$parts = parse_url($url);
$returl = "";
if (empty($parts['scheme'])){
$returl = "http://".$parts['path'];
} else if ($parts['scheme'] == 'https'){
$returl = "https://".$parts['host'].$parts['path'];
} else {
$returl = $url;
}
return $returl;
}

$url = convertUrl($url);
echo $url;

出力

http://www.youtube.com/watch

私が望むように期待される出力

http://www.youtube.com/watch?v=_ss

私は主にそれを使用せずに任意の URL を修正するためだけに使用するため、この関数を編集して、例に示すようにhttp://すべての URL を渡すことができるようにする方法はありますか? =_それは本当に私を悩ませているので〜ありがとう

4

3 に答える 3

5

あなたは取得したいでしょう:

$query = $parts['query'];

それは URL のクエリ セクションだからです。

これを行うために関数を変更できます。

function convertUrl ($url){
    $parts = parse_url($url);
    $returl = "";
    if (empty($parts['scheme'])){
        $returl = "http://".$parts['path'];
    } else if ($parts['scheme'] == 'https'){
        $returl = "https://".$parts['host'].$parts['path'];
    } else {
        $returl = $url;
    }
    // Define variable $query as empty string.
    $query = '';
    if ($parts['query']) {
        // If the query section of the URL exists, concatenate it to the URL.
        $query = '?' . $parts['query'];
    }
    return $returl . $query;
}
于 2012-08-29T20:22:49.143 に答える
2

渡されたURLの最初の部分だけが本当に気になる場合は、別のアプローチはどうでしょうか。

$pattern = '#^http[s]?://#i';
if(preg_match($pattern, $url) == 1) { // this url has proper scheme
    return $url;
} else {
    return 'http://' . $url;
}
于 2012-08-29T20:28:12.180 に答える
2

http://codepad.org/bJ7pY8bg

<?php
$url1 = 'www.youtube.com/watch?v=_ss';
$url2 = 'http://www.youtube.com/watch?v=_ss';
$url3 = 'https://www.youtube.com/watch?v=_ss';
function urlfix($url) {
return preg_replace('/^.*www\./',"https://www.",$url);
}
echo urlfix($url1)."\n";
echo urlfix($url2),"\n";
echo urlfix($url3),"\n";

出力:

https://www.youtube.com/watch?v=_ss
https://www.youtube.com/watch?v=_ss
https://www.youtube.com/watch?v=_ss
于 2012-08-29T20:31:20.460 に答える