Functie gebruiken binnen preg_replace

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Christophe Rogiers

Christophe Rogiers

27/06/2007 13:18:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$inhoud
= preg_replace('/\[url=(.+?)\]\[\/url\]/is','<a target="_new" href="$1">'.substr('$2', 0, 35).'...</a>', $inhoud);
?>


Hoi,

Weet iemand wat ik mis doe? alles werkt perfect behalve de substr...

alvast bedankt !
 
PHP hulp

PHP hulp

02/03/2024 20:56:31
 
Joren de Wit

Joren de Wit

27/06/2007 13:38:00
Quote Anchor link
Nee, dit gaat je inderdaad niet lukken. Wat er namelijk gebeurd is dat eerst de substr() uitgevoerd wordt voordat $2 van de preg_replace() vervangen wordt.

Met anderen woorden, $2 wordt door subst() als een gewone string gezien en pas de output van substr() wordt door de preg_replace() geinterpreteerd.

Dat dit het geval is kun je zien door substr('$2', 0, 1) te gebruiken. Je ziet dat dan alleen $ weergegeven wordt.
 
Christophe Rogiers

Christophe Rogiers

27/06/2007 13:58:00
Quote Anchor link
Bedankt voor je reactie!

Conclusie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
[ u r l = http://www.google.be]www.goooooooooooooooooooooooooooooooooooooooooooooooooooooooooooogle.be[/ u r l]
kan niet afgekort worden? :/

Alvast bedankt !
Gewijzigd op 01/01/1970 01:00:00 door Christophe Rogiers
 
Joren de Wit

Joren de Wit

27/06/2007 13:59:00
Quote Anchor link
Ja, dat kan wel, maar dat zul je op een andere manier moeten aanpakken. Met een preg_replace gaat je dat niet in 1x lukken.

Je zou bijvoorbeeld eerst de benodigde gegevens met preg_match_all() in een array kunnen zetten en vervolgens die gegevens weer aan elkaar plakken.
 
Arend a

Arend a

27/06/2007 14:15:00
Quote Anchor link
Waarom zou je lelijke substr functies gebruiken als je regex tot je beschikking hebt?

Je moet gewoon zorgen dat je alleen de eerste 35 caracters matched. Dus:
(.{1,35})

Ik heb 'm niet getest, maar volgens mij werkt dit gewoon.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$inhoud
= preg_replace('/\[url=(.+?)\](.{1,35}).+?\[\/url\]/is','<a target="_new" href="$1">'.substr('$2', 0, 35).'...</a>', $inhoud);
?>
Gewijzigd op 01/01/1970 01:00:00 door Arend a
 
Christophe Rogiers

Christophe Rogiers

27/06/2007 14:45:00
Quote Anchor link
Bedankt voor jullie reacties !

Het script van Arend werkt bijna...

Hij geeft de "e" van be niet weer van http://www.test.be maakt hij http://www.test.b

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$inhoud = preg_replace("!(^|[ \n\r\t])((http(s?)://|www\.|http(s?)://'www\.)?([a-z0-9_-]+(\.[a-z0-9_-]+)+)(/[^/ \n\r]*)*)!","\\1[url=\\2]\\2[/url]",$inhoud);
$inhoud = preg_replace('/\[url=(.+?)\]\[\/url\]/is','[url=$1]$1[/url]', $inhoud);                    
$inhoud = preg_replace('/\[url=(.+?)\](.{1,35}).+?\[\/url\]/is','<a target="_new" href="$1">$2</a>', $inhoud);    


Ik zou ook drie puntjes willen laten zien als een link is afgebroken. Zoiets als dit: http://www.phphulp.nl/foru...=1&pid=35039&replies

alvast bedankt !
Gewijzigd op 01/01/1970 01:00:00 door Christophe Rogiers
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.