[php] Code tags & Smylies

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • LoBbY_1
  • Registratie: Juli 2002
  • Laatst online: 17-09 20:43
Hallo,

Ik zit met een probleem waarvan ik geloof dat het ook al wel vaker naar voren in gekomen:) Maar aan de hand van de topics die ik in de search het gevonden kon ik mijn probleem niet echt oplossen.

Mijn probleem:
Ik ben een forumpje aan het maken en zoals in veel forum's zijn daar UBB codes in te gebruiken. Nu zit ik met het probleem dat de "code" die word ingevoegd tussen de [ code] & [ /code] ook word omgezet. Dit is erg lastig met smylie's :) Want een stuk code lezen met tientallen smylies erin leest niet echt geweldig :P

Om de smylies om te zetten van text naar plaatjes gebuik ik de volgende code:

[php]
$smylies = mysql_query("select * from smylies ") or die (mysql_error());
while ($inh_smylies = mysql_fetch_array($smylies))
{

$code = $inh_smylies
code:
1
2
3
4
5
6
7
;
$location = $inh_smylies[location];

$post = str_replace($code, "[img]\"$location\"[/img]", $post);

}
    mysql_free_result($smylies);


Misschien niet de mooiste code, maar werkt wel makkelijk als je alle smylie codes inclusief hun locatie in een DB hebt staan.

Nu heb ik al geprobeerd om in die while loop te zoeken naar de [ code] [ /code] tags, maar helaas zonder succes.

en voor de code tags gebruik ik

PHP:
1
2
3
4
5
6
$post = str_replace('   ', '        ', $post);  // 1 tab naar 8 spaties (is gelijk).
$post = str_replace('  ', '  ', $post);    // Alle 2 spaties naar "  ".
$post = preg_replace("/\\[code\](.*?)\\[\/code\]/is", "<blockquote><table border=1 bordercolor=#FF0000 bgcolor=#330000
 cellpadding=0 cellspacing=0 width=400><tr><td><font color=#00FF00 face=Courier size=3>
 <b><u>Code:</u></b></font><font color=#FFFF00 face=Courier size=2>
<br> \\1 </font></td></tr></table></blockquote>",$post);


Hoe zou ik nu de smylies uit de code tag kunnen filteren?

[ Voor 43% gewijzigd door LoBbY_1 op 01-11-2003 23:05 . Reden: kan niet typen ]

Een echte golver is nooit uitgeput


Acties:
  • 0 Henk 'm!

Verwijderd

zet de ereg_replace boven het gedeelte waar hij de smilies replaced dan zal hij als eerst kijken naar de
code:
1
tag zowiezo is dit geen handige manier om dingen te replacen volgens mij? (correct me if i'm wrong) :?

Acties:
  • 0 Henk 'm!

  • LoBbY_1
  • Registratie: Juli 2002
  • Laatst online: 17-09 20:43
Oh, op zich wekt dat replacen best goed. Je kan op die mannier redelijk makkelijk tags aanmaken en veranderen enz. Op zich nooit problemen mee gehad. Misschien is het wel een beetje wat langzamere code omdat ie alles iut de DB haalt..

[ Voor 23% gewijzigd door LoBbY_1 op 01-11-2003 23:08 ]

Een echte golver is nooit uitgeput


Acties:
  • 0 Henk 'm!

Verwijderd

LoBbY_1 schreef op 01 november 2003 @ 23:07:
Oh, op zich wekt dat replacen best goed. Je kan op die mannier redelijk makkelijk tags aanmaken en veranderen enz. Op zich nooit problemen mee gehad. Misschien is het wel een beetje wat langzamere code omdat ie alles iut de DB haalt..
dat moet volgens mij op een nog makkelijkere manier werken toch? dat veranderen in database? (weet iemand dat?) maar dat het ietsjes sneller werkt (de code) dat hij niet alles steeds uit de db haalt

Acties:
  • 0 Henk 'm!

  • LoBbY_1
  • Registratie: Juli 2002
  • Laatst online: 17-09 20:43
Dat zou wel kunnen geloof ik, maar dan zou je iedere smylie afzonderlijk in de php code kunnen zetten. Maar daar word die code ook weer zo groot van :) Maar het gaat wel zo snel dat je het niet echt merkt. Maar het grootste probleem is dat die smylies tussen de [ code] / [ /code] tags komt te staan. Ik dacht misschien dat je die in die while loop zou kunnen zetten.

Zoiets als :
[php]
$smylies = mysql_query("select * from smylies ") or die (mysql_error());
while ($inh_smylies = mysql_fetch_array($smylies))
{

if ( "zoeken in de Post naar de
code:
1
 /
tags"){
//doe niets
}else{

$code = $inh_smylies
code:
1
2
3
4
5
6
7
8
; 
$location = $inh_smylies[location]; 

$post = str_replace($code, "[img]\"$location\"[/img]", $post); 

}
} 
    mysql_free_result($smylies);

[ Voor 10% gewijzigd door LoBbY_1 op 01-11-2003 23:53 ]

Een echte golver is nooit uitgeput


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Ik kom atm op een soortgelijk probleem. En denk dat ik daarom mn parser maar es ga aanpassen oid. Iemand had hier op het forum ergens een stack-based parser gepost, maar die is wat mij betreft te groot en te complex.

Als ik een oplossing heb gevonden, laat ik het je weten, maar ik denk dat jij sneller een oplossing zult hebben, aangezien ik eerst bezig ben met wat assembly werk hier..

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

wat je zou kunnen doen is het volgende:

[php]
// alles tussen [code] opslaan in een array
preg_match_all('/\\[code\](.*?)\\[\/code\]/is', $content, $codematches);

// nu je andere regexpen

// nu nog een keer zoeken naar
code:
1
2
3
4
5
6
7
8
9
, maar de inhoud van $codematches
// gebruiken voor het omzetten

if (count($codematches)) {

  $i=0;
  $content = preg_replace('/\\[code\](.*?)\\[\/code\]/ise', 'codefunctie(\$codematches[1][\$i++])', $content);

}

[ Voor 3% gewijzigd door crisp op 02-11-2003 11:55 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • LoBbY_1
  • Registratie: Juli 2002
  • Laatst online: 17-09 20:43
Bedankt crisp!, ik zal het gelijk proberen!

Update :
Je code werkt, maar het kan aan mij liggen maar de variable "$content" heeft geen waarde na het phrasen? De variabele "$codematches" trowens wel. Dus alles in de array zetten lukt prima.

[ Voor 70% gewijzigd door LoBbY_1 op 02-11-2003 12:44 ]

Een echte golver is nooit uitgeput


Acties:
  • 0 Henk 'm!

  • BetuweKees
  • Registratie: Januari 2003
  • Laatst online: 15-07 20:53

BetuweKees

Flipje uit Tiel

offtopic:
kleine opmerking op je code voor smilies uit de database: het is slimmer deze eerst achterstevoren op lengte te sorteren, zodat smilies met langste code eerst gereplaced worden, anders heb je grote kans dat het fout gaat (bv dat je een :O met een } erboven krijgt ipv het koetje }:O..)

"ORDER BY code DESC" toevoegen dus..

Through meditation I program my heart to beat breakbeats and hum basslines on exhalation -Blackalicious || *BetuweKees was AFK; op de fiets richting China en verder


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

LoBbY_1 schreef op 02 november 2003 @ 12:16:
Bedankt crisp!, ik zal het gelijk proberen!

Update :
Je code werkt, maar het kan aan mij liggen maar de variable "$content" heeft geen waarde na het phrasen? De variabele "$codematches" trowens wel. Dus alles in de array zetten lukt prima.
vervang in jouw geval $content door $post

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • LoBbY_1
  • Registratie: Juli 2002
  • Laatst online: 17-09 20:43
Dat heb ik al geprobeerd, maar dan krijg ik een mooie error :)
Fatal error: Call to undefined function: codefunctie()

En als ik de Variabele op $content laat staan krijg ik die fout niet?

@ BetuweKees
Gedaan :)

//edit :)
Ik heb

PHP:
1
$post= preg_replace('/\\[code\](.*?)\\[\/code\]/ise', 'codefunctie(\$codematches[1][\$i++])', $post);


vervangen door:

PHP:
1
$post = preg_replace('/\\[code\](.*?)\\[\/code\]/ise', '\$codematches[1][\$i++]', $post);


en nu werkt het wel :)
Bedankt!

[ Voor 57% gewijzigd door LoBbY_1 op 02-11-2003 19:37 ]

Een echte golver is nooit uitgeput


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

wat ik je geef is simpel maar een voorbeeld wat je nog moet aanpassen naar jouw situatie; ik neem aan dat jij ook een functie gebruikt voor het opmaken van alles wat tussen [ code ] tags staat, codefunctie is dus in mijn voorbeeld gewoon een naam die je nog moet vervangen door je eigen functie.
ik ken de rest van je script niet, en ik heb ook geen zin om het helemaal te gaan voorkauwen; het idee achter mijn voorbeeld zou toch voor zich moeten spreken...

[ Voor 22% gewijzigd door crisp op 02-11-2003 19:33 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • LoBbY_1
  • Registratie: Juli 2002
  • Laatst online: 17-09 20:43
Nou, ik heb nog nooit echt iets met functies gedaan. Ik zal me daar eens in gaan verdiepen dan :) Wel vreemd was dan dat hij geen meldingen gaf van de functie uit jou voorbeeld.

@Grijze Vos
Tja :) je hebt gelijk, maar ik bedoel eigen functies!
|
|
\ /

[ Voor 20% gewijzigd door LoBbY_1 op 02-11-2003 22:06 ]

Een echte golver is nooit uitgeput


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Lijkt me stug dat je nog nooit iets met functies hebt gedaan. De hele programmatuur is opgebouwd uit functies.

Een simpel iets als mysql_query() is al een functie.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Grijze Vos schreef op 02 november 2003 @ 02:12:
Iemand had hier op het forum ergens een stack-based parser gepost, maar die is wat mij betreft te groot en te complex.
groot? complex? Die van mij is 150 regels, en totaal niet complex

En het is heel simpel, je doet eerst een *reg_match_all waarmee je alle tags eruit filtert. Daarna ga je gewoon door je array met matches heen. Als je een geldige open tag tegen komt dan push je dat op een stack, en roep je wat tag-open-code aan. Als het een sluit-tag is dan kijk je of die gelijk is aan de tag die bovenop de stack ligt, en zo ja dan roep je de betreffende tag-sluit-code aan en pop je de stack. En klaar is Grijze Vos :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
miscchien is complex niet het goede woord. "Moeilijk in een keer te overzien", zo beter? Mja, kheb me er neit echt in verdiept, mede door de onoverzichtelijkheid..

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • LoBbY_1
  • Registratie: Juli 2002
  • Laatst online: 17-09 20:43
Nou, als ik dat zo hoor dan heb ik nog wel veeeel te leren over dat soort codes. Maar wat voor stack? Wat moet ik me daar bij voorstellen dan?

Een echte golver is nooit uitgeput


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Een stack, oftewel stapel, is gewoon een soort datastructuur, net als een queue en een map etc. Basis programmeerkennis imho :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • LoBbY_1
  • Registratie: Juli 2002
  • Laatst online: 17-09 20:43
.oisyn schreef op 02 november 2003 @ 23:08:
Een stack, oftewel stapel, is gewoon een soort datastructuur, net als een queue en een map etc. Basis programmeerkennis imho :)
Dat zal ik eens gaan zoeken/leren dan :)

Iedereen bedankt voor de uitleg!!

Een echte golver is nooit uitgeput

Pagina: 1