PHP Functions 'linken'

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jesper Diovo

Jesper Diovo

03/01/2009 20:56:00
Quote Anchor link
Hoi hoi,

Naast al dat gediscussieer probeer ik mijn eigen website ook nog een beetje op te vrolijken. Ik zit al een tijdje met een leuk idee, maar ik krijg maar geen ingeving hoe ik dat het beste op kan lossen.

Wat ik wil:
Ik wil dat, net als in de code-parser hier, de PHP functies in een stuk code gelinkt worden naar php.net/<functie>. Ik had wat leuke regexpjes, maar die liepen dood. Nu kwam ik Pholerons highlighters tegen, en zag ik daar ook een paar leuke regeltjes tussen staan. Die heb ik dan ook samengevoegd tot iets leuks, alleen wil dit nog niet echt lukken:

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
<?php
function highlight_php_funcurl($source) {
    if(is_file($source)) {
        $source = highlight_file($source);
    }
else {
        $source = highlight_string($source);
    }

    /* vanaf hier van Pholeron */
    $expr = '/(\'((\\\\.)|[^\\\\\\\'])*\')|("((\\\\.)|[^\\\\\\\"])*")|(\/\*(\n|.)*?\*\/)|(\/\/[^\\n]+\\n)|(\$[a-z0-9_]+)|([a-z0-9_]+)|(<\?php|<\?|\? >)|([\n|\s]+)|(.)/i';
    $matches = array();
    
    preg_match_all($expr, $source, $matches);
    
    for($i = 0; $i < sizeof($matches[0]); $i++) {
        if(strcasecmp($match = $matches[0][$i], "") !== 0) {
            if(function_exists($match)) {
                $source = str_replace($match, '<a href="http://www.php.net/'.$match.'">'.$match.'</a>', $source);
            }
        }
    }
/* tot hier */
    return $source;
}

?>


VB: http://www.dzjemo.nl/phphulp/string-to-url.php (zie de code)

Ik krijg wel linkjes te zien, maar velen daarvan doen heel raar. Je ziet dat er een quote staat en een > tussen twee dezelfde functies waar er eigenlijk maar 1tje zou moeten staan. Bovendien linkt de eerste van de twee functies naar http://www.php.net/<;a href=??? Ik begrijp er niks van.

Alle hulp is welkom!

- Jezpur
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
 
PHP hulp

PHP hulp

23/12/2024 16:24:21
 
Yorick17

yorick17

03/01/2009 20:58:00
Quote Anchor link
Kun je niet gewoon even wat code uit een ubb parser halen en die gebruiken, ik denk dat dat ondermeer de oplossing is als ik het goed heb wat je bedoelt.
 
Jesper Diovo

Jesper Diovo

03/01/2009 21:02:00
Quote Anchor link
yorick17 schreef op 03.01.2009 20:58:
Kun je niet gewoon even wat code uit een ubb parser halen en die gebruiken, ik denk dat dat ondermeer de oplossing is als ik het goed heb wat je bedoelt.

Neen. Ik wil dat de functies die bestaan, dus die een link hebben op php.net, dat die gereplaced worden met een link naar php.net/<functie>, lukt maar half, as you can see ;-).

Edit: Problem solved, moest de replace iets detailleren ;-). Exacte code voor de geïnteresseerden:

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
<?php
function highlight_php_funcurl($source) {
    if(is_file($source)) {
        $source = highlight_file($source,true);
    }
else {
        $source = highlight_string($source,true);
    }

    
    $expr = '/(\'((\\\\.)|[^\\\\\\\'])*\')|("((\\\\.)|[^\\\\\\\"])*")|(\/\*(\n|.)*?\*\/)|(\/\/[^\\n]+\\n)|(\$[a-z0-9_]+)|([a-z0-9_]+)|(<\?php|<\?|\? >)|([\n|\s]+)|(.)/i'; // haal de spatie tussen ? en > weg!
    $matches = array();
    $aFunctions = get_defined_functions();
    $aIntFuncs = $aFunctions['internal'];
    //$aUsrFuncs = $aFunctions['user'];
    
    preg_match_all($expr, $source, $matches);
    
    for($i = 0; $i < sizeof($matches[0]); $i++) {
        if(strcasecmp($match = $matches[0][$i], "") !== 0) {
            if(function_exists($match) && in_array($match, $aIntFuncs)) {
                $source = str_replace($match."</font>", "<a href='http://www.php.net/".$match."'>".$match."</a></font>", $source);
            }
        }
    }

    return $source;
}

?>
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
 



Overzicht Reageren

 
 

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.