edit:
onderaan dit topic staat hoever ik nu al ben...
onderaan dit topic staat hoever ik nu al ben...
Ok, dit is al mijn tweede topic vandaag over preg_replace. Hoewel het dit keer niet persé aan de preg hoeft te liggen. Ik heb aan een bepaalde lap tekst in een database met de volgende code
HTML:
1
2
3
| bla bla bla<br>bla bla bla<br> <a href='bijlage/di - chill out.pls' target='blank' id='bijlage'>bla bla blaat</a><br> <a href='bijlage/175-7541_IMG.JPG' target='blank' id='bijlage'>bla bla blaat</a> |
Nu wil de gebruiker deze tekst wijzigen, om dit te kunnen moet deze html worden omgezet naar:
code:
1
2
3
4
| bla bla bla bla bla bla [bijlage=10]bla bla blaat[/bijlage] [bijlage=11]bla bla blaat[/bijlage] |
Dit doe ik met behulp van het volgende script
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| $bijlage_locatie = preg_replace("/(.*?)<a href=\'(.*?)\' target=\'blank\' id=\'bijlage\'>(.*?)<\/a>(.*?)/i","\\2, ", "$tekst"); $bijlage_array = preg_split("/,/", "$bijlage_locatie"); $bijlage_aantal = count($bijlage_array) -1; if(isset($bijlage_locatie) && $bijlage_locatie != $tekst) { for($i=0; $i<$bijlage_aantal; $i++) { $bijlage_locatie = $bijlage_array[$i]; $bijlage_locatie = preg_quote($bijlage_locatie,'/'); /* with special tnx to cheetah :p */ $data_locatie = mysql_query(" SELECT bijlage_id FROM bijlages WHERE locatie = '$bijlage_locatie' ")or die("<div id='error'>".mysql_error()."</div>"); list($bijlage_id) = mysql_fetch_array($data_locatie); $tekst = preg_replace("/\<a href=\'$bijlage_locatie\' target=\'blank\' id=\'bijlage\'>(.+?)<\/a>/i","[bijlage=$bijlage_id]\\1[/bijlage]", "$tekst"); } } |
Dit zou(lijkt mij) gewoon moeten werken, maar dat doet het dus niet. Als ik de eerdergenoemde tekst door dit script heen haal, dan zal er dit uitkomen:
HTML:
1
2
3
4
| [bijlage=11]bla bla blaat[/bijlage] <a href='bijlage/175-7541_IMG.JPG' target='blank' id='bijlage'>bla bla blaat</a> [/bijlage] |
Oftewel, na de eerste kapt die ermee (nee, niet alleen bij de laatste, want als ik 10 bijlage's heb, doet die alleen de eerste en de rest niet).
Ook geeft hij alleen een bijlage_id bij de eerste bijlage, bij de rest haalt die niets meer op uit de database, hij krijgt 0 rows terug.
Als ik echter de bijlage_locatie bekijk in de for lus, dan is die wel anders voor elke situatie (dus bij de eerste is die bijlage/di - chill out.pls, en bij de tweede bijlage/175-7541_IMG.JPG)
Ik snap dus niet waarom die na de eerste keer stopt...
edit:
Nog ff wat ik allemaal heb gedaan:
- ipv
code:
1
2
| ... $tekst = preg_replace("/\<a href=\'$bijlage_locatie\' target=\'blank\' id=\'bijlage\'>(.+?)<\/a>/i","[bijlage=$bijlage_id]\\1[/bijlage]", "$tekst"); |
code:
1
2
| ... $tekst = preg_replace("/\<a href=\'(.*?)\' target=\'blank\' id=\'bijlage\'>(.+?)<\/a>/i","[bijlage=$bijlage_id]\\1[/bijlage]", "$tekst"); |
Dit zorgde ervoor dat in eens wel alle bijlages werden vervangen, maar ze kregen allemaal het id nummer van de eerste mee.
Het ligt niet aan de white space, andere gekke tekens oid.
[ Voor 71% gewijzigd door Geert.H op 30-05-2005 12:06 ]