[php] eigen tags definieëren en vervangen in tekst

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,

Wie kan mij helpen? Ik wil tekst door een functie laten gaan, die bepaalde custom tags veranderd in span classes enzo..

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function processTags($text) {
    
    $tags = array();
    $tags[] = array("[admin]", "<span class=\"menuContentLight\">");
    $tags[] = array("[/admin]", "</span>");
    $tags[] = array("[b]", "<b>");
    $tags[] = array("[/b]", "</b>");
        
    $find = array();
    $replace = array();
    
    foreach ($tags as $tags)    {
        $find[] = $tags[0];
        $replace[] = $tags[1];
    }
    
    $text = preg_replace($find, $replace, $text);

    return $text;
    
}


Hij geeft nu terug:
hoi dit is regular []#vanaf nu bold# en hoi dit is old[/]en dit weer niet#tot hier bold#

hij haalt de 'b' dus weg in normale tekst, en laat de [] staan...

Enig idee iemand?

Tnx!!!!!!!

Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
PHP:
1
foreach ($tags as $tags)

En je kunt vaarwel zeggen tegen je array!

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

Je zoekt dus een UBB-parser.. :P

Kijk ook eens naar [rml]Cheatah in "[ PHP] Recursieve LIFO-parser"[/rml]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ok, je hebt gelijk; niet erg netjes...

Dat is nu foreach ($tags as $tag), maar nog steeds hetzelfde probleem...!

Acties:
  • 0 Henk 'm!

  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 23-08 22:47

dArtagnan

Een voor allen, allen voor een

Ik denk dat het handig is om eens naar de onderstaande code te kijken. Deze doet namelijk hetzelfde als jij wilt.

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
function ubb($bericht) 
{ 
 
    $bericht = str_replace(">", "&gt;", $bericht); 
    $bericht = str_replace("<", "&lt;", $bericht); 
    $bericht = str_replace("[br]", "<br />", $bericht);

    // normale fucties voor vet, italic, onderstreept en doorhalen.
    $bericht = preg_replace("/\\[b\](.*?)\\[\/b\]/si", "<b>\\1</b>", $bericht); 
    
    $bericht = preg_replace("/\[tekst=groot\](.*?)\\[\/tekst\]/si", "<span class=\"verdana_bold_14pt\">\\1</span>", $bericht);


    $patterns = array(); 
    $replacements = array(); 

    $patterns[0] = "#\\[email\](.*?)\\[/email\]#si"; 
    $replacements[0] = '<a href="mailto:\1">\1</a>'; 

    $patterns[1] = "#\[color=(.*?)\](.*?)\\[/color\]#si"; 
    $replacements[1] = '<div style="color=\1">\2</div>';
 
    $bericht = preg_replace($patterns, $replacements, $bericht); 
    return $bericht; 
}

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ok dan, tnx!!!!!
Ben niet erg thuis in regular expressions, maar na je code bestudeerd te hebben werkt het nu!

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function processTags($text) {
    
    $tags = array();
    
    $tags[] = array('#\\[admin\](.*?)\\[/admin\]#si', '<span class="menuContentLight">admin: \1</span>');
    $tags[] = array('#\\[b\](.*?)\\[/b\]#si', '<b>\1</b>');
    $tags[] = array('#\[url=(.*?)\](.*?)\\[/url\]#si', '<a href="\1">\2</a>');
    $tags[] = array('#\\[u\](.*?)\\[/u\]#si', '<u>\1</u>');
        
    $find = array();
    $replace = array();
    
    foreach ($tags as $tag) {
        $find[] = $tag[0];
        $replace[] = $tag[1];
    }
    
    $text = preg_replace($find, $replace, $text);

    return $text;
    
}

Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Verwijderd schreef op 16 maart 2004 @ 23:13:
PHP:
1
    $text = preg_replace($find, $replace, $text);
(in de topicstart)

Waarom, waarom..... :X

Een simpele str_replace voldoet hier ook, of eigenlijk: is hier VEEL beter op z'n plaats....

Er is hier geen noodzaak om reguliere expressies te gebruiken.

[ Voor 15% gewijzigd door beetle71 op 17-03-2004 07:53 ]


Acties:
  • 0 Henk 'm!

Verwijderd

beetle71 schreef op 17 maart 2004 @ 07:50:
[...]

(in de topicstart)

Waarom, waarom..... :X

Een simpele str_replace voldoet hier ook, of eigenlijk: is hier VEEL beter op z'n plaats....

Er is hier geen noodzaak om reguliere expressies te gebruiken.
Jawel, want een tag moet bestaan uit [begin]Zooi[/eind].
Als een of andere grapjas alleen [begin] typt, heb je met een str_replace (die vervangt [begin] en [/eind] apart) een probleem, maar is er met preg_replace (die zoekt naar een stuk tekst dat tussen [begin] en [/eind] staat) niks aan de hand ;)

Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Verwijderd schreef op 17 maart 2004 @ 07:56:
[...]

Jawel, want een tag moet bestaan uit [begin]Zooi[/eind].
Als een of andere grapjas alleen [begin] typt, heb je met een str_replace (die vervangt [begin] en [/eind] apart) een probleem, maar is er met preg_replace (die zoekt naar een stuk tekst dat tussen [begin] en [/eind] staat) niks aan de hand ;)
Het scriptje zoals in de topicstart gegeven hield hier geen rekening mee... Ten tweede vraag ik me af of je niet beter een [begin] zonder einde toch kan vervangen. het betekend weliswaar dat vanaf dat punt alles bold is in je site, maar dat is misschien wel beter dan dat er ergens [begin] blijft staan in de tekst.

[ Voor 30% gewijzigd door beetle71 op 17-03-2004 08:21 ]


Acties:
  • 0 Henk 'm!

Verwijderd

beetle71 schreef op 17 maart 2004 @ 08:07:
Het scriptje zoals in de topicstart gegeven hield hier geen rekening mee... Ten tweede vraag ik me af of je niet beter een [begin] zonder einde toch kan vervangen. het betekend weliswaar dat vanaf dat punt alles bold is in je site, maar dat is misschien wel beter dan dat er ergens [begin] blijft staan in de tekst.
Nee dan zou ik toch echt gaan voor ergens een code alla [begin] in mijn website ipv mijn gehele website vern**kt omdat alles bold is. Het staat niet echt professioneel vind je wel?

Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Verwijderd schreef op 17 maart 2004 @ 08:32:
[...]

Nee dan zou ik toch echt gaan voor ergens een code alla [begin] in mijn website ipv mijn gehele website vern**kt omdat alles bold is. Het staat niet echt professioneel vind je wel?
Moet zelf zegen dat ik ook [begin] niet echt professioneel vind ;)
Maar het goed, ik maakte mijn punt over die str_replace/preg_replace naar aanleiding van het scriptje in de topicstart.

Het scriptje dat Koraalduivel daarna gaf is wellicht beter, maar dat laat ik aan ieders eigen smaak :Y)
Pagina: 1