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:
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:
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?
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?