0

だから私はユーザーが自分のウェブサイトへの URL を提供する必要があります...

テストを通じて、通常は次の形式で送信されます。

  1. http://www.domain.com/page.html
  2. www.domain.com/page.html
  3. <a href="http://www.domain.com/page.html">http://www.domain.com/page.html</a>
  4. https://www.domain.com/page.html

URL 仕様内にほぼ収まる実際の URL のバリエーション: http://www.ietf.org/rfc/rfc1738.txt

プロトコルをそのままにして、フォーム 1/4 で URL を保存したいのですが、プロトコルが定義されていない場合は、http を使用すると思います。

どのフォームが入力されているかを判断してから変換しようとする以外に、効率的な変換を提供できる可能性のある戦略はありますか?

4

3 に答える 3

0

上記の 4 つの形式のうち、実際に変更したい形式は 1 つだけなので、以下を使用できます。

$x = "www.domain.com/page.html";
if(strpos($x, "http") === false){
    $x = "http://".$x;
    }
于 2013-01-22T15:00:43.973 に答える
0
$user_url = "www.domain.com/page.html"; // User submitted URL
$enhanced_url = substr($user_url , strpos($user_url,".") + 1 );

これは、あなたが言及したすべてのケースで domain.com/page.html を返します

于 2013-01-22T15:27:43.117 に答える
0

これを行う最善の方法は、正規表現を使用することです。PHPコード:

$text = "FTP Source: ftp://ftp.testftp.com/ - 
        My mail adress is name@yahoo.com and 
        I love www.facebook.com/ 
        I search things using http://www.google.fr/";
$urlRegularExpression = "/([fhtps]*:\/\/)?([a-zA-Z0-9\.-]*\.[a-zA-Z]{2,6})/";
preg_match_all($urlRegularExpression, $text, $urls);
print_r($urls);

結果:

Array
(
    [0] => Array //THE WHOLE RESULTS
        (
            [0] =>  'ftp://ftp.testftp.com'
            [1] =>  'www.facebook.com'
            [2] =>  'http://www.google.fr'
        )

    [1] => Array //THE PROTOCOLS USED (ftp, http, sftp, https)
        (
            [0] => 'ftp://'
            [1] => ''
            [2] => 'http://'
        )

    [2] => Array //THE ADRESS WITHOUT PROTOCOL
        (
            [0] => 'ftp.testftp.com'
            [1] => 'www.facebook.com'
            [2] => 'www.google.fr'
        )

)

編集: ) を正規表現の :// の前に移動して、プロトコル名のみを取得できます。

$urlRegularExpression = "/([fhtps]*):\/\/?([a-zA-Z0-9\.-]*\.[a-zA-Z]{2,6})/";

例: http:// -> http

于 2013-01-22T16:11:53.073 に答える