PHP Functions 'linken'
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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;
}
?>
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
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.
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)
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
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;
}
?>
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