preg_replace und function

elschbee

Grünschnabel
Ich habe ein Problem mit preg_replace bzw. mit einem Funktionsaufruf innerhalb von preg_replace und komme nicht weiter.

Ich habe eine Variable $content in der eventuell ein Link sein kann, der dann codiert werden soll. Ein Link ist in $content so eingebaut [EMAILLINK]user@domain.de[/EMAILLINK] und soll an meine Funktion emaillink() übergeben werden.

Ich suche und ersetze mit dieser Funktion:

PHP:
$content = preg_replace("!\[EMAILLINK\](.*?)\[/EMAILLINK\]!", emaillink("$1"), $content);

Die Funktion emaillink() sieht während der Entwicklung so aus:

PHP:
function emaillink($adresse) {
	return $adresse.' # '.strlen($adresse);
}

Nur kommt da leider nur Blödsinn raus.


Nochmal am Stück:

PHP:
//die funktion ---
function emaillink($adresse) {
	return $adresse.' # '.strlen($adresse);
} 


//der inhalt ---
$content = [EMAILLINK]user@domain.de[/EMAILLINK];

//verarbeitung
$content = preg_replace("!\[EMAILLINK\](.*?)\[/EMAILLINK\]!", emaillink("$1"), $content); 
echo $content;

//ausgabe
user@domain.de # 2

Meine Variable wird also gefunden, ausgegeben und gleichzeitig bekomme ich die Länge von '$1' (=2). Eigentlich will ich aber die Länge von 'user@domain.de', also 14.

Ich fürchte ich stehe dick auf dem Schlauch. Wo ist mein Fehler?
 
du solltest preg_replace_callback anwenden
PHP:
function emaillink($matches) {
    return $matches[1] .' # '.strlen($matches[1]);
}

$content = '[EMAILLINK]user@domain.de[/EMAILLINK]';
$content = preg_replace_callback("!\[EMAILLINK\](.*)\[/EMAILLINK\]!", 'emaillink', $content);
echo $content;
 
Zurück