Seite 1 von 1

!!!Hilfe zu preg_replace Funktion!!!

Verfasst: 23.05.2010 15:20
von xconnect
Hi@all,

ich versuche gerade ein Problem zu lösen, das bei mir dazu führt, das ich mir die Haare raufen muss... :grin:

Ich verwende den Auto_Video_Embed v.0.02 Mod von 4seven und wollte diesen mit Highslide optimieren. Allerdings scheitere ich immer wieder an der preg_replace Funktion von phpbb.

preg_replace nimmt ja einen String her und ersetzt diesen durch den nächsten String, also: preg_replace = string1, string2 (string2 ersetzt string1)

Nun zu meinem Problem: (es dreht sich um diese Codezeilen:)

Code: Alles auswählen

if (($youtube) && (strpos($message, '/watch?v=') !== false)){
$message = preg_replace('#<a class="postlink" href="http:\/\/(.*?).youtube.(.*?)\/watch\?v=(.*?)">(.*?)<\/a>#U',
'<a class="highslide" href="http://$1.youtube.$2/v/$3.swf" onclick="return hs.htmlExpand(this, {objectType: 'iframe', width: 425, height: 388, wrapperClassName: 'draggable-header'})"><img style="width: 130px; height: 97px;" src="http://i.ytimg.com/vi/$3/default.jpg" /></a>', $message);
}
... wobei $youtube eine boolesche Variable ist und die Funktion strpos(StringA,StringB) einen booleschen Wert zurückgibt ob StringB in StringA enthalten ist. (soviel zur Bedingung)
... die ECHTEN PROBLEMKINDER sind folgender Ausschnitt: objectType: 'iframe' UND wrapperClassName: 'draggable-header'
Da hier wie man an den Anführungsstrichen gut sieht in der HTML-Erszetzung Strings in Strings genutzt werden... und genau das klappt nicht!
Hat jemand da eine tolle Idee, wie man dieses Problem lösen kann?
Für Ideen wäre ich dankbar!

Wie immer LG
xconnect

Re: !!!Hilfe zu preg_replace Funktion!!!

Verfasst: 23.05.2010 16:01
von Balint
Hallo,

falls tatsächlich alles andere klappt, muss man die einfachen Hochkommata einfach nur escapen, also ein Backslash davor schreiben (siehe auf http://php.net/manual/en/language.types.string.php)

Also statt deinem Code ein

Code: Alles auswählen

if (($youtube) && (strpos($message, '/watch?v=') !== false)){
$message = preg_replace('#<a class="postlink" href="http:\/\/(.*?).youtube.(.*?)\/watch\?v=(.*?)">(.*?)<\/a>#U',
'<a class="highslide" href="http://$1.youtube.$2/v/$3.swf" onclick="return hs.htmlExpand(this, {objectType: \'iframe\', width: 425, height: 388, wrapperClassName: \'draggable-header\'})"><img style="width: 130px; height: 97px;" src="http://i.ytimg.com/vi/$3/default.jpg" /></a>', $message);
}

Viele Grüße,
Bálint

Re: !!!Hilfe zu preg_replace Funktion!!!

Verfasst: 23.05.2010 16:14
von xconnect
Hi Balint!

Vielen lieben Dank! :grin:

Das Problem ist somit gelöst! :D :D :D

Wie immer LG xconnect

Re: !!!Hilfe zu preg_replace Funktion!!!

Verfasst: 23.05.2010 20:40
von cYbercOsmOnauT
Nur zur Vollständigkeit...
xconnect hat geschrieben:..und die Funktion strpos(StringA,StringB) einen booleschen Wert zurückgibt ob StringB in StringA enthalten ist.
Diese Aussage ist falsch. strpos gibt die Position eines Strings innerhalb eines anderen an. Beispiel:

Code: Alles auswählen

strpos('Hallo Werner', 'allo')
gibt als Wert 1 zurück (weil mit 0 links zu zählen angefangen wird). Ist jedoch StringB in StringA nicht enthalten gibt strpos den boolschen Wert false zurück. Nur dann ist die Rückgabe ein boolscher Wert, sonst ist es Integer.

Grüße,
Tekin

Re: !!!Hilfe zu preg_replace Funktion!!!

Verfasst: 23.05.2010 22:53
von xconnect
Hi Tekin,

macht Sinn, da ja der Name der Funktion schon selbsterklärend ist "strpos = StringPosition" :grin:

Aber das ist ja nun unwesentlich für die Aufgabe...

Trotzdem Danke für den Hinweis...

Wie immer LG xconnect

Re: !!!Hilfe zu preg_replace Funktion!!!

Verfasst: 24.05.2010 02:58
von gn#36
So ganz unwichtig ist das nicht: Wenn dein zu suchender String direkt am Anfang beginnt, dann ist das Ergebnis 0, was einem false entspricht. Nur wenn du mit === bzw. !== prüfst kannst du beide unterscheiden.