| 

.NET C# Java Javascript Exception

2
Hey Leute,

ich habe in einem Text, der aus einer Datenbank kommt folgendes Problem:
Im WYSIWYG Editor erstellt der User einen Link mit der Klasse gBtn.
<a href="url.php" class="gBtn" title="Irgendwas">Testbereich</a>


Jetzt möchte ich gerne anstatt des A-Tags ein Button einfügen damit es folgendermaßen aussieht:
<button class="gBtn" onclick="setLocation('url.php');">Testbereich</button>


Jedoch weiß ich nicht wie ich das mit PHP realisieren soll.
Ich habe an preg_replace gedacht, jedoch scheitere ich schon am Regex:7
#<(/*)a class="gBtn"[^>]*>#msi

Damit bekomme ich nur den A-Tag raus, aber nicht ersetzt, so das ich auch die URL aus dem Href bekomme.
News:
29.02.2012
spiike 160 7
1 Antwort
1
Hi spiike,

$pattern = '/<a(.*?)href="(.*?)" class="gBtn"(.*?)>(.*?)<\/a>/';
$replace = '<button\1onlick="setLocation('\2');" class="gBtn"\3>\4</button>';
preg_replace($pattern, $replace , $src);


Das Pattern passt auf alle a-Tags mit der Klasse "gBtn" in $src.

Alle anderen Attribute, die womöglich mitgeliefert werden, werden einfach übernommen.
Die Klasse wird beibehalten, und das onlick-Attribut wird gesetzt.

Einzige Bedingung: das Attribut href muss immer vor dem Attribut class definiert werden. Kannst du das nicht sicherstellen, muss die RegExp entsprechend angepasst werden.


Allerdings würde ich eine andere Vorgehensweise empfehlen:

M.E. bietet sich hier an, dass per Javascript zu modifizieren, beispielsweise mit jQuery derart:
$("a.gBtn").each(
$(this).click(function(){
setLocation($(this).attr("href"));
return false;
});
);


Damit würde man es bei a-Tags belassen.
Statt dem Link zu folgen wird setLocation ausgeführt.
Man spart sich ein hässliches onlick-Attribut.
Wenn kein JS aktiv ist, geht zumindest noch der Link.

Ich bin nicht sicher, ob ich alles nötige beachtet habe, womöglich müssen noch Anpassungen vorgenommen werden. Testen konnte ichs leider noch nicht.
Aber es ist die Vorgehensweise, die ich dir empfehlen wollte.

Grüße
huckepick
29.02.2012
huckepick 887 1 8

Stelle deine Php-Frage jetzt!