[PHP]Probleempje met preg_replace en een functie daarin

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nou, zoals de topictitel al zegt, heb ik dus een probleem 8)7

Maar goed, wat is het dan? Ik wil dus het volgende. Ik wil van alle <h4> tags zogenaamde anchors maken. Dus dat de code
code:
1
<h4>Tekst</h4>

Vervangen wordt door:
code:
1
<a name=tekst><h4>Tekst</h4>


Nu gebruik ik om die a tag ervoor te zetten de volgende replace:
code:
1
2
3
$pattern = "#\<H4>(.*?)\</H4>#si";
$replacement = "<a name=\\1><H4>\\1</H4></a>";
$text = preg_replace($pattern, $replacement, $text);

En dat werkt in principe zoals ik het wil hebben, echter wil ik de tekst die in de a name tag komt te staan naar kleine letters omzetten en spaties wil ik laten vervangen door "_". Daarvoor heb ik nu deze code:
code:
1
2
3
$pattern = "#\<H4>(.*?)\</H4>#si";
$replacement = "<a name=".str_replace(" ", "_", strtolower('\\1'))."><H4>\\1</H4></a>";
$text = preg_replace($pattern, $replacement, $text);

Maar, nu wordt die tekst dus niet veranderd. En nu heb ik al van alles geprobeerd om dit te laten werken, ook heb ik /e gebruikt enzo, maar dan verdwijnt alles. Volgens mij heb ik een foutje in die pattern, maar ik zie niet wat. Misschien dat jullie het zien. Overigens heb ik al de search, php.net en nog wat andere dingen nagezocht, maar niets bruikbaars kunnen vinden...

Acties:
  • 0 Henk 'm!

  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 26-04-2024
PHP:
1
$replacement = "<a name=".str_replace(" ", "_", strtolower('\\1'))."><H4>\\1</H4></a>";
Heeft weinig nut op de plek waar het nu staat. PHP voert strtolower en str_replace nu uit op de string '\\1'. Je zult deze functies pas aan moeten roepen nadát je preg_replace hebt gedaan... Dus iets als:
PHP:
1
$text = str_replace(" ", "_", strtolower($text))

[ Voor 64% gewijzigd door ludo op 26-04-2004 19:16 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Zou op zich wel kunnen, maar in die $text staat dus een volledige HTML pagina, met tekst en al... hierdoor zou dus alle spaties vervangen worden... en alle hoofdletters verdwijnen, en dat is niet echt de bedoeling... ;)

Acties:
  • 0 Henk 'm!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Je kunt gaan werken met de e-modifier van PRCE, en dan geef je als tweede argument een functienaam en de argumenten op. Dan voer je in die functie gewoon de benodigde bewerkingen uit op de tekst.

Zie voorbeeld 4 in de PHP-manual bij preg_replace ;)
http://nl2.php.net/preg_replace

There's no place like 127.0.0.1


Acties:
  • 0 Henk 'm!

  • Rickets
  • Registratie: Augustus 2001
  • Niet online

Rickets

Finger and a shift

Je kan het id-attribuut aan een element toevoegen en als fragment identifier gebruiken. Dan kan je de onnodige anchor-tags achterwege laten.
HTML:
1
<h4 id="tekst">..</h4>

[ Voor 10% gewijzigd door Rickets op 26-04-2004 20:25 ]

If some cunt can fuck something up, that cunt will pick the worst possible time to fucking fuck it up, because that cunt’s a cunt.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thnx Rickets, dat werkt perfect... pff... wat een zoektocht kan dat zijn zeg...

De code is nu zo:
PHP:
1
2
3
$pattern = "(\<H4>(.*?)\</H4>)si";
$replacement = "<H4 id=\"\\1\">\\1</H4>";
$text = preg_replace($pattern, $replacement, $text);
Pagina: 1