[php] quote check in een forum..

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Hey,

ik wil ervoor zorgen dat als mensen vergeten een quote te openen/sluiten, hij dat automatisch recht zet.

Eerst dacht ik simpelweg een regex te maken die in 1 keer [quote ] en [ /quote] zou vervangen, maar die werkt niet lekker:

PHP:
1
2
3
<?
$inhoud = eregi_replace("\\\[quote\\]([^\\\[]*)\\\[/quote\\]","<span class=quote>\\1</span>",$inhoud );
?>


Toen bedacht ik me dat ik ook zelf het aantal quote openingen en sluitingen zou kunnen tellen, en dan het verschil met preg_replace zou kunnen verwijderen:

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
27
28
29
30
<?
// tellen
$quote_openen = substr_count("$inhoud", "[quote]");
$quote_sluiten = substr_count("$inhoud", "[/quote]");

// niet gelijk
if ($quote_openen!="$quote_sluiten") {

    // meer openen dan sluiten
    if ($quote_openen>$quote_sluiten) {
        
        // verschil berekenen
        $verschil = $quote_openen-$quote_sluiten;
        
        // open quotes weghalen
        $inhoud = preg_replace("(\\[quote\])","",$inhoud,$verschil);
    }

    // meer sluiten dan openen
    if ($quote_sluiten>$quote_openen) {
        
        // verschil berekenen
        $verschil = $quote_sluiten-$quote_openen;
        
        // sluit quotes weghalen
        $inhoud = preg_replace("(\\[/quote\])","",$inhoud,$verschil);
    }
    
}
?>


Dat werkt wel, maar je raad het al, als er een verschil is, dan verwijderd hij de eerste die hij tegen komt.

Dit:
[ quote]blaat[ /quote]%20[ quote][ quote]blaat[ /quote]

resulteert dan in:
blaat[ /quote]%20[ quote][ quote]blaat[ /quote]

Omdat hij natuurlijk niet weet welke quote fout zit, en gewoon de eerste die hij tegenkomt verwijderd.
Iemand een idee hoe ik dit het beste zou kunnen oplossen?

Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Ja, je moet er niet eentje weghalen, maar gewoon een sluitquote aan het einde toevoegen.

Verder

code:
1
if ($quote_openen!="$quote_sluiten") {

Zijn er geen quotes nodig om $quote_sluiten, je wil hier die variabele naar een string casten, wat vrij overbodig is, omdat het al een string is.

Dat geldt bij "$inhoud" enzo natuurlijk ook.

[ Voor 4% gewijzigd door eamelink op 31-01-2003 13:18 ]


Acties:
  • 0 Henk 'm!

  • irondog
  • Registratie: Januari 2001
  • Laatst online: 11-05 10:49

irondog

alle dingen moeten onzin zijn

TangLeFuzZ schreef op 31 januari 2003 @ 12:44:
Hey,

ik wil ervoor zorgen dat als mensen vergeten een quote te openen/sluiten, hij dat automatisch recht zet.

Eerst dacht ik simpelweg een regex te maken die in 1 keer [quote ] en [ /quote] zou vervangen, maar die werkt niet lekker:

PHP:
1
2
3
<?
$inhoud = eregi_replace("\\\[quote\\]([^\\\[]*)\\\[/quote\\]","<span class=quote>\\1</span>",$inhoud );
?>

Dit wert toch prima! Nu moet je alle overgebleven [ quote] en [ /quote] gewoon weggooien.

[ Voor 6% gewijzigd door irondog op 31-01-2003 13:22 ]

[P5B deluxe] [Core2Duo 6300] [2 X 1GB DDR2] [GF FX7300] [320 GB WD] [Gentoo] [VISTA]


Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
eamelink: thanks! daar had ik nog niet eens aan gedacht :)
irondog schreef op 31 January 2003 @ 13:20:
TangLeFuzZ schreef op 31 januari 2003 @ 12:44:
Dit wert toch prima! Nu moet je alle overgebleven [ quote] en [ /quote] gewoon weggooien.
Nope, die doet het bij mij niet lekker met bepaalde stukken tekst...

Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
irondog schreef op 31 januari 2003 @ 13:20:
Dit wert toch prima! Nu moet je alle overgebleven [ quote] en [ /quote] gewoon weggooien.
Ik kom er net achter dat die niet werkt als er binnen die tags nog zo'n zelfde combinatie van tags wordt gebruikt (wat bij een quote bij mij gebeurd).
Alleen de binnenste 2 tags werken dan.
Denk bijv aan deze 2 regexes:

PHP:
1
2
3
4
<?
$inhoud = eregi_replace("\\\[quote\\]([^\\\[]*)\\\[/quote\\]","<span class=quote>\\1</span>",$inhoud );
$inhoud = eregi_replace("\\\[edit\\]([^\\\[]*)\\\[/edit\\]","<span class=edit>\\1</span>",$inhoud );
?>


Als ik die edit tag in een quot tag plaats, dan werkt alleen de edit tag.

[ Voor 31% gewijzigd door TangLeFuzZ op 31-01-2003 15:59 ]


Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
je kan in de string zoeken naar de plek waar
het eerst voorkomt. vervolgens kijk je steeds een stukje verder totdat je
[...]
ziet staan. in het eerste geval zet je er nog eens
voor. ofzo. als [/quote] niet komt, dan zet je die helemaal aan het eind van je string. vervolgens vraag je de gebruiker of deze correctie aanvaard word, enz.
Pagina: 1