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 回答