[php] ubb and 'link in tekst' re's: complicaties

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Ik heb een scriptje op een site die het mogelijk zou moeten maken om zowel simpele UBB-codes te parsen als links in tekst om te zetten naar klikbare links.

Dus er is een stuk tekst met bijvoorbeeld zo'n UBB-code:

code:
1
[url=www.davdigital.com]davdigital[/url]


of zo-een:

code:
1
[url=http://www.davdigital.com]davdigital[/url]


en verder kunnen er ook nog gewone adressen in de tekst staan: www.davdigital.com.

De bedoeling is dat dit allemaal goed werkt.

Ik heb nu de volgende stukken code:

Simpele UBB:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$srch = array(
    "'\\[b\](.*?)\\[\/b\]'i",
    "'\\[list\]'i",
    "'\\[\/list\]'i",
    "'\\[li\]'i",
    "'\\[\/li\]'i",
    "'\[url=http://(.*?)\](.*?)\\[\/url\]'is", // external absolute url
    "'\[url=(.*?)\](.*?)\\[\/url\]'i" // internal relative url
);

$rplc = array(
    "<b>$1</b>",
    "<ul>",
    "</ul>",
    "<li>",
    "<br /></li>",
    "<a class='text' target='_blank' href='http://$1'>$2</a>",
    "<a class='text' href='$1'>$2</a>"
);

$txt = preg_replace($srch, $rplc, $txt);


Maak link:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
// Filter replace structures
$srch = array(
    "/[^href]\"?([\w-?&;#~=\.\/]+\@(\\[?)[a-z0-9\-\.]+\.([a-z]{2,6}|[0-9]{1,3})(\]?))\"?/is",
    "/[^'](((http:\/\/)|(www\.))([\w\.]+)([,:%#&\/?=\w+\.-]+))(?:\b|$)/is"
);

$rplc = array(
    " <a class=\"text\" href=\"mailto:$1\">$1</a>",
    " <a class=\"text\" href=\"http://$1\" target=\"_blank\">$1</a>"
);

$txt = preg_replace($srch, $rplc, $txt);


Het is nu zo dat het UBB-filter eerst wordt losgelaten op een tekst en daarna het 'maak link' filter. Resultaat is dat de link die vanuit de UBB werd gemaakt nog een keer vervangen wordt en er niks meer van klopt. Als een link al in HTML-vorm staat, dan moet er niet nog een keer een link van worden gemaakt.

Ik heb dat geprobeerd met dit stukje regular expression:
code:
1
[^']
die er voor zou moeten zorgen dat een URL niet met een quote mag beginnen. Dit haalt helaas niet veel uit.

Wellicht is het handiger om het proces om te draaien: eerst links mooi maken en dan pas filteren op UBB-codes. Dan zou het goed moeten gaan. Probleempje is dat heel m'n code (al behoorlijk wat) nu uitgaat van de eerder genoemde volgorde. Is dit nog te fixen of moet ik de rest van m'n code maar gaan verbouwen?

[ specs ] [ Tweaker gallery ]


Acties:
  • 0 Henk 'm!

  • cavey
  • Registratie: Augustus 2000
  • Laatst online: 29-05 01:29
Het is nog wel te fixen hoor......
door die filter-replace structures op te nemen in je ubb-functie...

waarom zou je twee keer een preg_replace uitvoeren op hetzelfde stukje tekst als het ook in 1 zitting kan?

Je moet dan die check idd zo doen als je doet, maar voor "losse urls" moet je nog even nagaan dat er GEEN [url] ubb-tag voor staat.. staat dat er wel, dan overslaan dus
dus iets van:

"/^\\[url.*\]http://www etc etc etc/is"