Oké.. ik vind het eerlijk gezegd een beetje ranzig om gewoon een e-mailadres weer te geven op een forum... Daarom wil ik graag het adres laten veranderen in een plaatje. Maar ik heb liever niet dat men [mail ]adres[ /mail] moet gebruiken. Dus ik dacht aan het volgende:

<?php
$text = preg_replace("([a-z0-9\-_.]+?@[\w\-]+\.([\w\-\.]+\.)?[\w]+)",text2email('\\0'),$text);
?>

En die functie die gebruikt wordt:
<?php
function text2email($text)
{
$explode = explode("@",$text);
$return = "<img src=\"createimage.php?user=".$explode[0]."&domain=".$explode[1]."\" border=\"0\" />";
return $return;
}
?>

Waarom de explode?
Ik gebruik verder het script van Sander Draaier: Text naar image. Die heb ik iets veranderd zodat $_GET['user'] en $_GET['domain'] weer om een @ worden gezet (zodat je weer een e-mailadres krijgt).
Dat doe ik omdat een spider anders alsnog het adres ziet staan in de bron (<img src="[email protected]"/>). In mijn geval is dat niet.

Jaja.. de vraag komt er aan! :D

Het probleem is dus dat het niet helemaal werkt.. ;)
Als in die \\0 gewoon laat zien zie ik gewoon het adres, maar als ik hem gebruik in de functie en daar laat ik $text echoën, dan zie ik \0. Volgens mij wordt het in de regel waar de functie wordt aangeroepen (die preg_replace) die \\0 dus niet als echt string doorgegeven.
Hij geeft overigens wél een plaatje weer met deze tekst: [email protected]@ (dus alles is in $_GET['user'] gaan zitten).

Iemand enig idee hoe dat komt, of hoe ik het beter kan gebruiken? Of zit ik opnieuw het wiel uit te vinden en heb ik niet goed gezocht? :D

Oh ja.. ben niet zo'n ster met al die preg_replace, str_replace en eregi.. ;)

Elwin
eej kikker :o)

gebruik eens \\1 :)
Dat is het ook niet... Als ik namelijk in de functie het volgende zet:
<?php
echo "1: $explode[0]<br>\n";
echo "2: $explode[1]\n";
?>

(En ga nu niet zeuren over variabelen in de quotes, want het is ff om snel te testen..)

Dan geeft hij de volgende output:
1: \1
2:
Edit:
En in de bron is de image-tag zo geworden:
<img src="createimage.php?user=&domain=" border="0" />

Elwin
K weet het antwoord.
Bas had hetzelfde probleem, ^^

<?php
$text = preg_replace("/([a-z0-9\-_.]+?@[\w\-]+\.([\w\-\.]+\.)?[\w]+)/sie", "text2email('\\0')", $text);
?>

Pattern Modifiers
e : If this modifier is set, preg_replace() does normal substitution of backreferences in the replacement string, evaluates it as PHP code, and uses the result for replacing the search string. Single and double quotes are escaped by backslashes in substituted backreferences.

Only preg_replace() uses this modifier; it is ignored by other PCRE functions.
Cheers Mitch! Dat is hem.. :D
Let niet op de zooi met die URL's en dat nog niets werkt... ben hard bezig, als ik tijd heb.. :D

Elwin
Zoals ik al zei:
Let niet op de zooi met die URL's en dat nog niets werkt... ben hard bezig, als ik tijd heb.. :D
;)

Ben bezig met behulp van een echte template. Dus een *.html op de server. Via deze tutorial. Verder gaat het niet veel voorstellen.. Ik wou gewoon weer eens iets ontdekken.. ;)

Overigens, met mijn toevoeging op het text naar image script kan je een nog mooiere maken. Alleen dat ondersteund mijn PHP (4.2.2) nog niet... :/

Edit:
Mitch schreef op 29.09.2004 20:41

Nais :)

Naiser:

Edit 2:
Adres van plaatje Mitch is veranderd.. :D

Elwin
Waarom ga je niet over op 5.0.2 dan?
Is reuze stabiel hier bij mij, en dat in Windows :P
Tsjah.. weet ik eigenlijk niet... sta er nooit zo bij stil dat ik een 'oude' versie van PHP heb draaien.. Ik kon tot nu toe alles...

Daarbij zou ik niet weten hoe ik het moet updaten.. Maar goed, daar is Google voor.. :D

Elwin (misschien eens in de herfstvakantie..)
Ik was met een tut bezig over het opzetten van een Apache 2.x server + PHP 5.x + Mysql 4.x maar ik had ff geen zin meer, :P
Mitch schreef op 29.09.2004 20:54
Ik was met een tut bezig over het opzetten van een Apache 2.x server + PHP 5.x + Mysql 4.x maar ik had ff geen zin meer, :P
Voor Linux? Of Windhoos? :D

Elwin

Reageren