url-grijpen

Gesponsorde koppelingen

PHP script bestanden

  1. url-grijpen

« Lees de omschrijving en reacties

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?php
error_reporting(E_ALL);

/**
  * Deze functie grijpt standaard alleen hyperlinks (href waardes) uit $_sContent.
  * Met standaard bedoel ik dat we de functie aanroepen met alleen de 1e parameter.
  *
  * @param string $_sContent                | De tekst waarin we gaan zoeken naar hyperlinks
  * @param boolean $_bCheckHTTP_prefix    | Moeten we controleren of de URL begint met "http://", als een URL hier niet mee begint dan plakken we dit er voor
  * @param boolean $_bWithTrailingSlash        | Mag een URL in het resultaat eindigen met een back-slash?
  * @param boolean $_bGetPlainURL            | Gaan we in de tekst ($_sContent) zoeken naar urls zoals "http://foo.bar", "www.foo.bar" of "http://www.foo.bar"
  * @return mixed                        | boolean false (Error) / array (resultaat / lege array geen match)
  *
  * @access public
  */

function get_hyperlinks(    $_sContent,
                            $_bCheckHTTP_prefix = true,
                            $_bWithTrailingSlash = false,
                            $_bGetPlainURL = false
                            )
{

    if( empty($_sContent) )
    {

        # Error
        return false;
    }

    
    $sRegexURL    =    '((?:http:\/\/|www\.)' .
                    (
$_bGetPlainURL ? '{1,2}\w+(?:\.\w+)*(?:\.[a-z]{2,3})?' : '{0,2}(?:\w+(?:\.\w+)*(?:\.[a-z]{2,3})|\d+(?:\.\d+){3}|localhost)' ) .
                    '(?:\/[\w.?&=]+)*)(\/)?';
        
    if( !preg_match_all(    '/(<a[^>]*href=(?:"|\'))?[ ]*' .
                            $sRegexURL .
                            '[ ]*((?:"|\')[^>]*\>(?:.*?)\<[ ]*\/[ ]*a[ ]*\>)?/is', $_sContent, $aMatch) )
    {

        # Geen match
        return array();
    }

            
    //print_r($aMatch);
    //exit;
    
    # Vul de resultaat array

    $aResult = array();
    
    foreach( $aMatch[2] as $k => $v )
    {

        # Ga naar de volgende iteratie als het een anchor is
        # en we willen plain links hebben en andersom.

        if( ($_bGetPlainURL && !empty($aMatch[1][$k]) && !empty($aMatch[4][$k]))
            || !
$_bGetPlainURL && (empty($aMatch[1][$k]) || empty($aMatch[4][$k])) )
        {

            continue;
        }

        
        $_v = strtolower($v);
        
        if( strpos($_v, ' ') !== false )
        {

            $_v = str_replace(' ', '', $_v);
        }

        
        # Een regex fout fixen
        if( strpos($_v, 'www.http://') === 0 )
        {

            $v = substr(trim($v), 4);
            
            if( $_bGetPlainURL  )
            {

                $aMatch[0][$k] = substr(trim($aMatch[0][$k]), 4);
            }
        }

        elseif( $_bCheckHTTP_prefix && strpos($_v, 'http://') !== 0 )
        {

            $v = 'http://' . $v;
        }


        $aResult[] = array(    'url'    => $v . ( $_bWithTrailingSlash ? $aMatch[3][$k] : '' ),
                            'match'    => $aMatch[0][$k] );
    }


    unset($aMatch, $_v);
    return $aResult;

}
# end function get_hyperlinks

#
# Testen
#


$c =     ' www.plainurl1.nl
        www.http://plainurl2.nl
        <a href="http://www.url1.nl">Goede hyperlink</a>
        <a href="http://www.url2.nl/">Goede hyperlink</a>
        <a href=\'url3.nl\'>Goede hyperlink</a>
        <a href="url4.nl/">Goede hyperlink</a>
        <a href="www.http://url5.nl">Verkeerde hyperlink</a>
        <a href="verkeerd.__/">Verkeerde hyperlink</a>
        <a href="localhost">Goede hyperlink</a>
        <a href="www">Verkeerde hyperlink</a>
        <a href="123.123.123.123">Goede hyperlink</a>
        <a href="foo.bar/map1/map2/plaatje.gif">Goede hyperlink</a>
        <a href="www.foo.bar/map1/map2/plaatjemetslash.gif/">Goede hyperlink</a>
        <a href="http://user.url.com/map1/plaatje.jpg?nats=MTA2MjY6Mzox&content=awdawdad">Goede hyperlink</a>
        plainurl3.nl/
        http://plainurl4.nl/'
;
        
echo '<pre>';
echo '$c: ' . htmlspecialchars($c) . "\n\n";

echo 'get_hyperlinks($c): (Match href in anchors en haal laatste back-slash uit het url)' . "\n\n";
foreach( get_hyperlinks($c) as $k => $v )
    echo $k . ")\turl: " . $v['url'] . "\n\tmatch: " . htmlspecialchars($v['match']). "\n\n";

echo "\n" . 'get_hyperlinks($c,true,true): (Match href in anchors en laat de laatste back-slash staan in url)' . "\n\n";
foreach( get_hyperlinks($c,true,true) as $k => $v )
    echo $k . ")\turl: " . $v['url'] . "\n\tmatch: " . htmlspecialchars($v['match']). "\n\n";

echo "\n" . 'get_hyperlinks($c,true,false,true): (Match plain URLS in $c en haal laatste back-slash uit het url)' . "\n\n";
foreach( get_hyperlinks($c,true,false,true) as $k => $v )
    echo $k . ")\turl: " . $v['url'] . "\n\tmatch: " . htmlspecialchars($v['match']). "\n\n";

echo "\n" . 'get_hyperlinks($c,true,true,true): (Match plain URLS in $c en laat de laatste back-slash staan in url)' . "\n\n";
foreach( get_hyperlinks($c,true,true,true) as $k => $v )
    echo $k . ")\turl: " . $v['url'] . "\n\tmatch: " . htmlspecialchars($v['match']). "\n\n";

echo '</pre>';
?>

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.