[Erledigt] Links in best. Foren über anonym.to laufen lassen

Du hast Probleme beim Einbau oder bei der Benutzung eines Mods? In diesem Forum bist du richtig.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
IPB_Flüchtling
Mitglied
Beiträge: 1862
Registriert: 23.12.2004 22:46

[Erledigt] Links in best. Foren über anonym.to laufen lassen

Beitrag von IPB_Flüchtling »

Ahoi,

ich möchte die externen Links nicht generell sondern nur in manchen Foren über einen Dereferer-Dienst wie Anonym.to laufen lassen, also z.B. nur in den Foren mit den IDs 5 und 6.

Hierzu müsste dieser Mod etwas abgewandelt werden:

http://phpbbhacks.com/download/5779

Da der Mod nur sehr kurz ist, gebe ich mal den Code wieder:

Code: Alles auswählen

#
#-----[ OPEN ]---------------------------------------
#
open includes/bbcode.php

#
#-----[ FIND ]---------------------------------------
#(line 627)
find $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);

#
#-----[ REPLACE WITH ]-------------------------------
#
replace with $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://www.anonym.to/?\\2\" target=\"_blank\">\\2</a>", $ret);

#
#-----[ FIND ]---------------------------------------
#(line 633)
find $ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);

#
#-----[ REPLACE WITH ]-------------------------------
#
replace with $ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://www.anonym.to/?http://\\2\" target=\"_blank\">\\2</a>", $ret);

#
#-----[ FIND ]---------------------------------------
#(line 653)
find $text = preg_replace("#<!-- BBCode auto-link start --><a href=\"(.*?)\" target=\"_blank\">.*?</a><!-- BBCode auto-link end -->#i", "\\1", $text);

#
#-----[ REPLACE WITH ]-------------------------------
#
replace with $text = preg_replace("#<!-- BBCode auto-link start --><a href=\"http://www.anonym.to/?(.*?)\" target=\"_blank\">.*?</a><!-- BBCode auto-link end -->#i", "\\1", $text);
Um Links nur in den Foren 5 und 6 über anonym.to laufen zu lassen, müsste wohl eine IF-Abfrage der folgenden Art integriert werden:
if ($forum_id==5 || $forum_id==6) {
$ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://www.anonym.to/?\\2\" target=\"_blank\">\\2</a>", $ret);
}

else {
$ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);
}

usw.
Wie bekomme ich aber $forum_id definiert?

Für Ideen, Anregungen oder gar fertige Lösungen wäre ich wie immer dankbar!

Schönes Wochenende!
IPB_Flüchtling
Zuletzt geändert von IPB_Flüchtling am 21.03.2006 15:43, insgesamt 1-mal geändert.
IPB_Flüchtling
Mitglied
Beiträge: 1862
Registriert: 23.12.2004 22:46

Beitrag von IPB_Flüchtling »

Ich habe es jetzt einmal testweise so versucht, wie im ersten Posting angedeutet:

Code: Alles auswählen

if ($forum_id == 5 || $forum_id == 6)
{
   $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://www.anonym.to/?\\2\" target=\"_blank\" rel=\"nofollow\">\\2</a>", $ret);
}

else
{
   $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\" rel=\"nofollow\">\\2</a>", $ret);
}
usw.

Leider hat es nicht funktioniert: Es sind weiterhin alle Links - gleichgültig, in welchem Forum sie gepostet wurden - ohne Umleitung über anonym.to aufrufbar geblieben.

Ist es überhaupt möglich, in der bbcode.php mittels SQL-Abfrage festzustellen, in welchem Forum ein Link gepostet wurde und die Forums-ID einer Variablen zuzuordnen (muss ja nicht die $forum_id sein)?

Editiert:

Habe jetzt folgenden Code hinzugefügt und die Variablen entsprechend angepasst. Hat leider auch nicht funktioniert. :cry:

Code: Alles auswählen

//
// Start initial var setup
//
if ( isset($HTTP_GET_VARS[POST_FORUM_URL]) || isset($HTTP_POST_VARS[POST_FORUM_URL]) )
{
	$forum_anonym = ( isset($HTTP_GET_VARS[POST_FORUM_URL]) ) ? intval($HTTP_GET_VARS[POST_FORUM_URL]) : intval($HTTP_POST_VARS[POST_FORUM_URL]);
}
else if ( isset($HTTP_GET_VARS['forum']))
{
	$forum_anonym = intval($HTTP_GET_VARS['forum']);
}
else
{
	$forum_anonym = '';
}
Schönen Wochenanfang!
IPB_Flüchtling
Benutzeravatar
MagMo
Ehemaliges Teammitglied
Beiträge: 584
Registriert: 30.10.2005 16:06
Wohnort: Köln
Kontaktdaten:

Beitrag von MagMo »

Hi,

ich habe den Code gerade mal überflogen, die Forum-ID wird doch in der Datei viewtopic.php definiert. Dann müsstest du doch auch von der Funktion bbcode_...irgendwas...() darauf zurückgreifen können, wenn du die entsprechende Variable in der Funktion auf Global gesetzt hast. Hast du da gemacht? Ich frage nur nach, weil du davon nichts geschrieben hast und das eine mögliche Ursache für dein Problem sein kann. Wenn du's nicht gemacht hast, dann teste deinen if-Code nochmals zusammen hiermit:

Code: Alles auswählen

function bbcode....
{
 global $forum_id;
Wenn es klappt, dann wirkt sich das aber auch auf die Links in den Signaturen aus, d.h. ein und derselbe Link in der Signatur läuft in einem Forum über Anonym.to im anderen Forum nicht.

Grüße
MagMo
IPB_Flüchtling
Mitglied
Beiträge: 1862
Registriert: 23.12.2004 22:46

Beitrag von IPB_Flüchtling »

Hallo MagMo,

schon einmal vielen herzlichen Dank! Du bist völlig auf der richtigen Fährte!

Es ist nur ein kleines (???) Problem übriggeblieben: Also wenn ich eine URL ohne BBCode eingebe, klappt die Umleitung über anonym.to in den Foren 5 und 6 jetzt! Wenn ich aber den BBCode [ url ] benutze, läuft der betreffende Link nicht über anonym.to.

Also

Code: Alles auswählen

www.test.com
wird jetzt umgewandelt zu

Code: Alles auswählen

http://www.anonym.to/?http://www.test.com
Leider nicht umgewandelt werden Links der Art

Code: Alles auswählen

[URL=http://www.test.com]Titel[/URL]
Der Mod, den ich benutzen möchte (Link in meinem Startposting), greift übrigens in der bbcode.php nur in die beiden Funktionen

function make_clickable($text)
function undo_make_clickable($text)

ein. Habe jetzt in beide Funktionen das global $forum_id; eingefügt. Stellvertretend gebe ich mal die kürzere der beiden Funktionen wieder:

Code: Alles auswählen

function undo_make_clickable($text)
{

global $forum_id;

if ($forum_id == 5 || $forum_id == 6)
{
	$text = preg_replace("#<!-- BBCode auto-link start --><a href=\"http://www.anonym.to/?(.*?)\" target=\"_blank\" rel=\"nofollow\">.*?</a><!-- BBCode auto-link end -->#i", "\\1", $text);
}

else
{
	$text = preg_replace("#<!-- BBCode auto-link start --><a href=\"(.*?)\" target=\"_blank\" rel=\"nofollow\">.*?</a><!-- BBCode auto-link end -->#i", "\\1", $text);
}

	$text = preg_replace("#<!-- BBcode auto-mailto start --><a href=\"mailto:(.*?)\">.*?</a><!-- BBCode auto-mailto end -->#i", "\\1", $text);

	return $text;

}
Hättest Du vielleicht auch eine Idee, wie das noch verbliebene Problem gelöst werden könnte, sodass in den Foren 5 und 6 wirklich alle Links über einen Dereferrer-Dienst wie anonym.to laufen?

Danke noch einmal!
IPB_Flüchtling
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Beitrag von cYbercOsmOnauT »

Reicht Dir die korrekte Angabe von MagMo IFB? Oder sollen wir Dir ne Mod-Datei erstellen? :)

Grüße,
Tekin
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
IPB_Flüchtling
Mitglied
Beiträge: 1862
Registriert: 23.12.2004 22:46

Beitrag von IPB_Flüchtling »

Hallo Tekin,

zunächst einmal herzlichen Glückwunsch zum Aufstieg zum Supporter! :P

Wenn Du mir ein bisschen helfen könntest, wäre das super! Irgendwo ist noch der Wurm drin. Habe aber keine Ahnung, wo. :roll: Das Problem ist, dass Links, die ich mit dem BBCode [ url ] poste, NICHT über anonym.to geleitet werden.

Ich poste mal den gesamten fraglichen Abschnitt aus meiner bbcode.php:

Code: Alles auswählen

function make_clickable($text)
{
global $forum_id;
$text = preg_replace('#(script|about|applet|activex|chrome):#is', "\\1:", $text);

	// pad it with a space so we can match things at the start of the 1st line.
	$ret = ' ' . $text;

	// matches an "xxxx://yyyy" URL at the start of a line, or after a space.
	// xxxx can only be alpha characters.
	// yyyy is anything up to the first space, newline, comma, double quote or <

if ($forum_id == 5 || $forum_id == 6)
{
   $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://www.anonym.to/?\\2\" target=\"_blank\" rel=\"nofollow\">\\2</a>", $ret);
}

else
{
   $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\" rel=\"nofollow\">\\2</a>", $ret);
}

   // matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing
   // Must contain at least 2 dots. xxxx contains either alphanum, or "-"
   // zzzz is optional.. will contain everything up to the first space, newline,
   // comma, double quote or <.

if ($forum_id == 5 || $forum_id == 6)
{
   $ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://www.anonym.to/?http://\\2\" target=\"_blank\" rel=\"nofollow\">\\2</a>", $ret);
}

else
{
   $ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\" rel=\"nofollow\">\\2</a>", $ret);
}

	// matches an email@domain type address at the start of a line, or after a space.
	// Note: Only the followed chars are valid; alphanums, "-", "_" and or ".".
	$ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret);

   $ret = preg_replace("/<a href=(.*?)>(.*?)<\/a>/ie", "(strlen(\"\\2\") > 65 && !eregi(\"<\", \"\\2\") ) ? '<a href='.stripslashes(\"\\1\").'>'.substr(\"\\2\", 0, 35) . '.....' . substr(\"\\2\", -25).'</a>' : '<a href='.stripslashes(\"\\1\").'>'.\"\\2\".'</a>'", $ret);

	// Remove our padding..
	$ret = substr($ret, 1);

	return($ret);
}

/**
 * Nathan Codding - Feb 6, 2001
 * Reverses the effects of make_clickable(), for use in editpost.
 * - Does not distinguish between "www.xxxx.yyyy" and "http://aaaa.bbbb" type URLs.
 *
 */
function undo_make_clickable($text)
{
global $forum_id;
if ($forum_id == 5 || $forum_id == 6)
{
	$text = preg_replace("#<!-- BBCode auto-link start --><a href=\"http://www.anonym.to/?(.*?)\" target=\"_blank\" rel=\"nofollow\">.*?</a><!-- BBCode auto-link end -->#i", "\\1", $text);
}
else
{
	$text = preg_replace("#<!-- BBCode auto-link start --><a href=\"(.*?)\" target=\"_blank\" rel=\"nofollow\">.*?</a><!-- BBCode auto-link end -->#i", "\\1", $text);
}
	$text = preg_replace("#<!-- BBcode auto-mailto start --><a href=\"mailto:(.*?)\">.*?</a><!-- BBCode auto-mailto end -->#i", "\\1", $text);

	return $text;

}
Wo liegt da bloß der Hund begraben? :(

Gute Nacht erstmal!
Wolfgang
Benutzeravatar
MagMo
Ehemaliges Teammitglied
Beiträge: 584
Registriert: 30.10.2005 16:06
Wohnort: Köln
Kontaktdaten:

Beitrag von MagMo »

Moin,

um auch das gleiche für URLs via BBCode zu machen musst du die folgende Funktion entsprechend bearbeiten:

function bbencode_second_pass($text, $uid)

Da auch dir Foren-ID-Variable auf global setzen und für die Bearbeitung des BBCodes ändern:
includes/bbcode.php

Code: Alles auswählen

#---[ FINDE ]---
	$bbcode_tpl['url1'] = str_replace('{URL}', '\\1', $bbcode_tpl['url']);
	$bbcode_tpl['url1'] = str_replace('{DESCRIPTION}', '\\1', $bbcode_tpl['url1']);

	$bbcode_tpl['url2'] = str_replace('{URL}', 'http://\\1', $bbcode_tpl['url']);
	$bbcode_tpl['url2'] = str_replace('{DESCRIPTION}', '\\1', $bbcode_tpl['url2']);

	$bbcode_tpl['url3'] = str_replace('{URL}', '\\1', $bbcode_tpl['url']);
	$bbcode_tpl['url3'] = str_replace('{DESCRIPTION}', '\\2', $bbcode_tpl['url3']);

	$bbcode_tpl['url4'] = str_replace('{URL}', 'http://\\1', $bbcode_tpl['url']);
	$bbcode_tpl['url4'] = str_replace('{DESCRIPTION}', '\\3', $bbcode_tpl['url4']);

#---[ DANACH EINFÜGEN ]---
	$bbcode_tpl['url1a'] = str_replace('{URL}', 'http://www.anonym.to/?\\1', $bbcode_tpl['url']);
	$bbcode_tpl['url1a'] = str_replace('{DESCRIPTION}', '\\1', $bbcode_tpl['url1a']);

	$bbcode_tpl['url2a'] = str_replace('{URL}', 'http://www.anonym.to/?http://\\1', $bbcode_tpl['url']);
	$bbcode_tpl['url2a'] = str_replace('{DESCRIPTION}', '\\1', $bbcode_tpl['url2a']);

	$bbcode_tpl['url3a'] = str_replace('{URL}', 'http://www.anonym.to/?\\1', $bbcode_tpl['url']);
	$bbcode_tpl['url3a'] = str_replace('{DESCRIPTION}', '\\2', $bbcode_tpl['url3a']);

	$bbcode_tpl['url4a'] = str_replace('{URL}', 'http://www.anonym.to/?http://\\1', $bbcode_tpl['url']);
	$bbcode_tpl['url4a'] = str_replace('{DESCRIPTION}', '\\3', $bbcode_tpl['url4a']);

#---[ FINDE ]---
function bbencode_second_pass($text, $uid)
{

#---[ DANACH EINFÜGEN ]---
 global $forum_id;

#---[ FINDE ]---
	// matches a [url]xxxx://www.phpbb.com[/url] code..
	$patterns[] = "#\[url\]([\w]+?://([\w\#$%&~/.\-;:=,?@\]+]|\[(?!url=))*?)\[/url\]#is";
	$replacements[] = $bbcode_tpl['url1'];

	// [url]www.phpbb.com[/url] code.. (no xxxx:// prefix).
	$patterns[] = "#\[url\]((www|ftp)\.([\w\#$%&~/.\-;:=,?@\]+]|\[(?!url=))*?)\[/url\]#is";
	$replacements[] = $bbcode_tpl['url2'];

	// [url=xxxx://www.phpbb.com]phpBB[/url] code..
	$patterns[] = "#\[url=([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
	$replacements[] = $bbcode_tpl['url3'];

	// [url=www.phpbb.com]phpBB[/url] code.. (no xxxx:// prefix).
	$patterns[] = "#\[url=((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
	$replacements[] = $bbcode_tpl['url4'];

#---[ ERSETZE MIT ]---
	// matches a [url]xxxx://www.phpbb.com[/url] code..
	$patterns[] = "#\[url\]([\w]+?://([\w\#$%&~/.\-;:=,?@\]+]|\[(?!url=))*?)\[/url\]#is";
if ($forum_id == 5 || $forum_id == 6) 
{ 
	$replacements[] = $bbcode_tpl['url1'];
} 
else 
{ 
	$replacements[] = $bbcode_tpl['url1a'];
}
	// [url]www.phpbb.com[/url] code.. (no xxxx:// prefix).
	$patterns[] = "#\[url\]((www|ftp)\.([\w\#$%&~/.\-;:=,?@\]+]|\[(?!url=))*?)\[/url\]#is";
if ($forum_id == 5 || $forum_id == 6) 
{ 
	$replacements[] = $bbcode_tpl['url2'];
} 
else 
{ 
	$replacements[] = $bbcode_tpl['url2a'];
}

	// [url=xxxx://www.phpbb.com]phpBB[/url] code..
	$patterns[] = "#\[url=([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
if ($forum_id == 5 || $forum_id == 6) 
{ 
	$replacements[] = $bbcode_tpl['url3'];
} 
else 
{ 
	$replacements[] = $bbcode_tpl['url3a'];
}

	// [url=www.phpbb.com]phpBB[/url] code.. (no xxxx:// prefix).
	$patterns[] = "#\[url=((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";if ($forum_id == 5 || $forum_id == 6) 
{ 
	$replacements[] = $bbcode_tpl['url4'];
} 
else 
{ 
	$replacements[] = $bbcode_tpl['url4a'];
}
Ich denke das sollte es gewesen sein.

Grüße
MagMo
IPB_Flüchtling
Mitglied
Beiträge: 1862
Registriert: 23.12.2004 22:46

Beitrag von IPB_Flüchtling »

Ein winziger Flüchtigkeitsfehler ist drinnen, den ich aber wirklich nur deshalb erwähne, falls jemand diese Modifikation des "Disable Direct Linking"-Mods nachmachen möchte: Und zwar ist in der function bbencode_second_pass($text, $uid), damit es so klappt, wie es soll, die url1 mit url1a zu ersetzen (und umgekehrt), die url2 mit url2a (und umgekehrt) usw. Also so:
// matches a [url]xxxx://www.phpbb.com[/url] code..
$patterns[] = "#\[url\]([\w]+?://([\w\#$%&~/.\-;:=,?@\]+]|\[(?!url=))*?)\[/url\]#is";
if ($forum_id == 5 || $forum_id == 6)
{
$replacements[] = $bbcode_tpl['url1a'];
}
else
{
$replacements[] = $bbcode_tpl['url1'];
}
usw. Wie gesagt: Ich erwähne das nur, weil es für den einen oder anderen "Anfänger" unter Umständen zum Stolperstein werden könnte. Was ich aber eigentlich sagen wollte:

Vielen herzlichen Dank, MagMo! Es klappt nun alles hervorragend!

Und gelernt habe ich auch wieder etwas. :P

LG, Wolfgang
Benutzeravatar
MagMo
Ehemaliges Teammitglied
Beiträge: 584
Registriert: 30.10.2005 16:06
Wohnort: Köln
Kontaktdaten:

Beitrag von MagMo »

Hi,

keine Ursache.
IPB_Flüchtling hat geschrieben:Ein winziger Flüchtigkeitsfehler ist drinnen...
:oops:
Das passiert, wenn man auf die Schnelle loscodet und vorher den Text, was gewünscht ist, nur nochmal überfliegt. Dann kann es mal zu so einem Dreher kommen. :) *schäm*

Grüße
MagMo
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Beitrag von cYbercOsmOnauT »

Bööser Magmo. Wie konntest Du nur! Sowas würde mir nieeee passieren! :evil: :evil: :D
IPB_Flüchtling hat geschrieben:Hallo Tekin,

zunächst einmal herzlichen Glückwunsch zum Aufstieg zum Supporter! :P
Dankesehr. :)
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
Antworten

Zurück zu „phpBB 2.0: Mod Support“