Toon posts:

[PHP] Quote tag, hij zet rare enter neer!

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi.,

Ik ben bezig met een site waar ik [.QUOTE] wil gebruiken (zonder ., d0h :z).
Ik heb deze code:
PHP:
1
<?$content=htmlspecialchars($content);$content=nl2br($content);$content=stripslashes($content);    $content=preg_replace("/(\\[quote\])(.*?)(\\[\/quote\])/s","<BR><blockquote><b>Quote:</b><table width=90% border=0 cellspacing=0 cellpadding=0>    <tr><td bgcolor=#000000 height=1></td></tr><tr><td><table><tr><td><div class=klein>\\2</div></td></tr></table></td</tr><tr><td bgcolor=#000000 height=1></td></tr></table></blockquote>",$content);?>

Nu werkt dit perfect.
Als ik
code:
1
[quote]test[/quote]

type zet ie het keurig neer.
Maar als ik:
code:
1
2
3
[quote]
dus daarna een enter doe
[/quote]

doe, dan zet ie er dit neer:
code:
1
2
3
4
QUOTE:
<HR>
    (<-- een enter!)
het berichtje wat hij ophaalde, hij zet er dus eerst een enter voor.. hoe zorg ik dat dit weg gaat?

Alvast bedankt..

  • Nikel
  • Registratie: Juli 2000
  • Niet online
Hij voegt een enterkarakter in, of gewoon een <br>?

Lijkt mij dat je <br> bedoeld, maar waarom zeg je dat dan niet gewoon?

Maar als je nu die nl2br gewoon na de preg_replace doet, doet ie dan niet gewoon wat je wilt?

Als dat niet werkt, kun je natuurlijk gewoon je regex aanpassen, ik ben geen regex held dus zou niet weten wat je er dan van zou moeten maken.

Verwijderd

Topicstarter
regex jah, maar hij zet er dus een enter neer, die enter die je zelf typt, van [.quote](ENTER) die moet ie dus niet pakken, dat zou mooiste zijn..

Verwijderd

trim('\\2') ?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Ik heb hier zelf ook al eens mee zitten eikelen. Todat ik ineens iets doorhad. Kijk eens waneer je nl2br uitvoerd? Hoe ziet je \n er uit bij de regexp?

trim gaat iig niet werken :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
heb al zitten kloooien, jmmr dat de UBB van dit forum niet openbaar werd gemaakt.. heeft iemand anders goedwerkende code? (oops code request, naja ik heb het echt geprobeerd 2 uur mee bezig geweest..

Verwijderd

je kan natuurlijk in je regex na die [ quote] en voor die [ /quote] nog een "mogelijke" enter zetten, dus (\n)?

dan neemtie die niet mee in je (.*)

en wordt die er dus niet voor gezet

Verwijderd

Topicstarter
Op woensdag 05 juni 2002 20:59 schreef zellufs het volgende:
je kan natuurlijk in je regex na die [ quote] en voor die [ /quote] nog een "mogelijke" enter zetten, dus (\n)?

dan neemtie die niet mee in je (.*)

en wordt die er dus niet voor gezet
Hmzz ik heb geprobeerd maar dat lijkt me niet te werken, iemand heeft toch wel forum hier met die quote tag , het is best wel irri iig

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 20:38
Als je een non-profit site hebt kun je de parser van ACM gebruiken. Moet je maar ff zoeken. [search=stackbased parser verbeteren]

  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 19:50
Op woensdag 05 juni 2002 20:14 schreef Stoel het volgende:
heb al zitten kloooien, jmmr dat de UBB van dit forum niet openbaar werd gemaakt.. heeft iemand anders goedwerkende code? (oops code request, naja ik heb het echt geprobeerd 2 uur mee bezig geweest..
idd jammer :(

Dit forum rulez gewoon :D

Verwijderd

Ik zit ook met het volgende probleem..

in mijn code staat het volgende
code:
1
2
$postText = str_replace ("\r", '<br>', $list['text']);
$postText = str_replace ("\n", '<br>', $postText);

Dit staat in de 'text'
code:
1
2
3
4
5
[quote][b]On 2002-06-29 20:06:14 wrote admin the following[/b]
[..]
test[/quote]

LOL :)

en dit is de uitkomst op de 'site'
code:
1
2
3
4
5
6
7
8
9
10
quote:
--------------------------------------------------------------------------------
On 2002-06-29 20:06:14 wrote admin the following
[..]
test
--------------------------------------------------------------------------------



LOL

oftewel veelste veel enters :{ is er geen mogelijkheid dat ik \r \n en \r\n in 1 slag verander? en wanner er een \r \n staat deze ook gelijk mee kan nemen?

Verwijderd

probeer eens:
code:
1
ereg_replace("(\n | \r | \n\r)","",$blaatstring);

dan heb je zeker weten geen enters meer in je text.

Verwijderd

Op zaterdag 29 juni 2002 22:16 schreef Cheatah het volgende:
www.php.net/nl2br
liev dat je er mee komt, dit is echter al meerdere keren geprobeerd en hiep niet zoals het replace stukkie wel werkte :)
Op zaterdag 29 juni 2002 22:31 schreef ridde100 het volgende:
probeer eens:
code:
1
ereg_replace("(\n | \r | \n\r)","",$blaatstring);

dan heb je zeker weten geen enters meer in je text.
:D Tnx... ik ga het gelijk testen :)

-edit werkt echter niet :(

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Ik gebruik zelf altijd deze bij de quote-regexp:
code:
1
'(?:<br>|)\\[quote\](?:<br>|)(.+?)(?:<br>|)\\[/quote\](?:<br>|)'si

Let erop dat in latere PHP-versies geen <br> bij nl2br() gebruikt, maar <br/>. Daarom gebruik ik zelf altijd een eigen regexp om enters naar <br>'s om te zetten.

Hij werkt als volgt: hij matcht zowel de [ quote ]'s waar enters voor staan als die waar geen enters voorstaan. Aangezien wat gematcht wordt, vervangen wordt, verdwijnen de enters... :)

Verwijderd

Op zaterdag 29 juni 2002 23:15 schreef elnino het volgende:
Ik gebruik zelf altijd deze bij de quote-regexp:
code:
1
'(?:<br>|)\\[quote\](?:<br>|)(.+?)(?:<br>|)\\[/quote\](?:<br>|)'si

Let erop dat in latere PHP-versies geen <br> bij nl2br() gebruikt, maar <br/>. Daarom gebruik ik zelf altijd een eigen regexp om enters naar <br>'s om te zetten.

Hij werkt als volgt: hij matcht zowel de [ quote ]'s waar enters voor staan als die waar geen enters voorstaan. Aangezien wat gematcht wordt, vervangen wordt, verdwijnen de enters... :)
Hoe moet ik deze dan implementeren?.. ik heb meerdere dingen geprobeerd..

eregi, ereg, str_replace ed... maar't werkte nie ;)

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op zondag 30 juni 2002 11:52 schreef xtentic het volgende:
Hoe moet ik deze dan implementeren?.. ik heb meerdere dingen geprobeerd..

eregi, ereg, str_replace ed... maar't werkte nie ;)
met preg_replace(). (Het is een PCRE-regular expression)
code:
1
2
3
4
$str = preg_replace (
    "'(?:<br>|)\\[code\](?:<br>|)(.+?)(?:<br>|)\\[/code\](?:<br>|)'si",
    "<blockquote><font size=\"1\">code:</font><hr><font face=\"courier, fixedsys, lucida console\">\\1</font>[/quote]",
    $str);

edit: Excuses voor het lay-out-verfraaien... ;)

Verwijderd

Topicstarter
elnino,ik test hem zo ff, thanks dat je dit topic nog ff omhoog schopt, ik ga het straks ff testen, TX

Verwijderd

Dit lost bij mij trouwens nog niet de dubbele enters op, mischien dat iemand ff per icq kan helpen ofzo :D

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 20:38
Je moet in je regex geven dat er ná de [.quote]-tag een onbeperkt aantal lege characters kunnen komen :). Dit geldt btw ook voor vòòr de [/quote].

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Op zondag 30 juni 2002 15:26 schreef ddc het volgende:
Je moet in je regex geven dat er ná de [.quote]-tag een onbeperkt aantal lege characters kunnen komen :). Dit geldt btw ook voor vòòr de [/ quote].
En dan daarna pas nl2br() doen...
(zoals Janoz al duidelijk probeerde te maken)

On track


Verwijderd

Op zondag 30 juni 2002 15:44 schreef WouZz het volgende:

[..]

En dan daarna pas nl2br() doen...
(zoals Janoz al duidelijk probeerde te maken)
Ja het vervelende is dat ik niet weet hoe ik dat moet fixen, mja op dit moment is dat voor mij persoonlijk nog niet zo'n groot probleem :)

Verwijderd

Topicstarter
hmmzz..
PHP:
1
<?$content = komt uit een formulier!$content = preg_replace("'(?:<br>|)\\[quote\](?:<br>|)(.+?)(?:<br>|)\\[/quote\](?:<br>|)'si","<div class='mini'><BR><blockquote><b>Quote:</b><HR noshade color='#000000' size='1'>\\1<HR noshade color='#000000' size='1'></blockquote></div>", $content);$content = nl2br();echo $content;?>

Het werkt alleen niet echt!! hij parsed het goed, maar de enters blijven !! .. Of ben ik nu dom ??

Verwijderd

Stoel, je bent niet dom, maar't probleem van denk ik ons beiden zit um ergens anders in :D

Verwijderd

Topicstarter
Op zondag 30 juni 2002 18:08 schreef xtentic het volgende:
Stoel, je bent niet dom, maar't probleem van denk ik ons beiden zit um ergens anders in :D
HaHa, Dankje :P
Zou mooi zijn als de React RML Parser openbaar kwam, gebeurd toch niet maja :z :P

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 20:38
Een andere oplossing is geen regex-parser te gebruiken :Y)

Verwijderd

Op zondag 30 juni 2002 19:49 schreef ddc het volgende:
Een andere oplossing is geen regex-parser te gebruiken :Y)
en een andere manier is?

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Op zondag 30 juni 2002 19:59 schreef xtentic het volgende:

[..]

en een andere manier is?
Stackbased?

On track


Verwijderd

Op zondag 30 juni 2002 20:37 schreef WouZz het volgende:

[..]

Stackbased?
:D ik moet daarover nog eerst een paar boeken lezen, maar dit kleine probleem moet gewoon veel simpeler te verhelpen zijn ;)

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Anders maak je van de (?:<br>|) in de code (?:<br><br>|<br>|) . Daardoor worden dubbele enters ook gematcht.

Het wordt dan:
code:
1
'(?:<br><br>|<br>|)\\[quote\](?:<br><br>|<br>|)(.+?)(?:<br><br>|<br>|)\\[/quote\](?:<br><br>|<br>|)'si

Ik denk overigens wel dat stackbased iets netter zal zijn, dit is uiteraard een vrij ranzige oplossing, maar misschien doet hij het nu wel beter.

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Nogmaals:
Je moet in je regex geven dat er ná de [.quote]-tag een onbeperkt aantal lege characters kunnen komen . Dit geldt btw ook voor vòòr de [/ quote].
Dus verdiep je eens in regexes zou ik zeggen.. >:)

On track


  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op zondag 30 juni 2002 19:49 schreef ddc het volgende:
Een andere oplossing is geen regex-parser te gebruiken :Y)
:z
Wil overigens niet zeggen dat je dan geen problemen meer hebt ;)

Verwijderd

Topicstarter
Op zondag 30 juni 2002 23:33 schreef elnino het volgende:
Anders maak je van de (?:<br>|) in de code (?:<br><br>|<br>|) . Daardoor worden dubbele enters ook gematcht.

Het wordt dan:
code:
1
'(?:<br><br>|<br>|)\\[quote\](?:<br><br>|<br>|)(.+?)(?:<br><br>|<br>|)\\[/quote\](?:<br><br>|<br>|)'si

Ik denk overigens wel dat stackbased iets netter zal zijn, dit is uiteraard een vrij ranzige oplossing, maar misschien doet hij het nu wel beter.
Nope jou codes werken niet echt, jmmr is dat...

elnino: kan ikje maybe op msn ofzow spreken ?? gaat wat makkelijker

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Sorry voor de late reactie, ik was het topic even uit het zicht verloren (en sorry voor het omhoogschoppen). Het is belangrijk dat je voordat je de Regular Expressions aanroept, de enters in <BR>'s veranderd!! Of je kunt de code natuurlijk ook aanpassen dat hij zoekt naar \r en \n enzo.

Ik dacht dat dit wel redelijk vanzelfsprekend was, aangezien in de code <br>'s staan en die dus vervangen worden, maar als dat niet duidelijk was: sorry voor de onduidelijkheid.

Gebruik dus voordat je de Regular Expressions aanroept iets als:
code:
1
$message = ereg_replace("\r\n|\n|\r", "<br>", $message);

Uiteraard kun je ook voor PCRE kiezen, dat doet er nu niet toe, aangezien gulzigheid (greediness) hier niet direct een probleem kan vormen.

Verder nog succes ermee! :)

En Stoel > ik heb je zo snel niet kunnen bereiken, sorry.
Pagina: 1