MyBB.de Forum
Fremdverlinkung von Bildern unterbinden - Druckversion

+- MyBB.de Forum (https://www.mybb.de/forum)
+-- Forum: Anpassungen (https://www.mybb.de/forum/forum-47.html)
+--- Forum: Plugin-Diskussionen (https://www.mybb.de/forum/forum-38.html)
+--- Thema: Fremdverlinkung von Bildern unterbinden (/thread-17677.html)

Seiten: Seiten: 1 2


Fremdverlinkung von Bildern unterbinden - Jockl - 15.01.2011

Hallo zusammen,

auch wenn in unserem Forum die Fremdverlinkung von Bildern untersagt ist, bleibt es doch immer wieder nicht aus, dass es passiert. Ich versuche derzeit, Codeänderungen vorzunehmen, dass entsprechende img-Tags nur als Link angezeigt werden.

Hierzu habe ich zum Einen in der editor.js die Funktion imsertIMG wie folgt abgeändert:
PHP-Code:
insertIMG: function()
{
    
image prompt(this.options.lang.enter_image"http://");
    var 
Ergebnis image.search(/\bhttp:\/\/www.MeineURL.com\w*/gi);

    if(
Ergebnis != -1)
    {
        
this.performInsert("[img]"+image+"[/img]"""true);
    }
    else
    {
        
alert("Fremdverlinkte Bilder sind nicht erlaubt. Gib bitte nur den Link im folgenden Fenster ein.");
        
this.insertURL(image);
    }
}, 

Das funktioniert soweit auch ganz gut. Allerdings hilft das natürlich nichts, wenn der User die Tags von Hand eingibt, oder ein entsprechender Beitrag zitiert wird. Also dachte ich mir, in der class_parser.php den Bereich für den img-Code wie folgt zu ändern:

PHP-Code:
    // Convert images when allowed.
    
if($options['allow_imgcode'] != 0)
    {
        
$pattern "#\[im(.*)\]http://www.MeineURL.com/(.*?)\[/img\]#ise";
        
        if(
preg_match($pattern$message)){
            
$message preg_replace("#\[img\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#ise""\$this->mycode_parse_img('$2')\n"$message);
            
$message preg_replace("#\[img=([0-9]{1,3})x([0-9]{1,3})\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#ise""\$this->mycode_parse_img('$4', array('$1', '$2'));"$message);
            
$message preg_replace("#\[img align=([a-z]+)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#ise""\$this->mycode_parse_img('$3', array(), '$1');"$message);
            
$message preg_replace("#\[img=([0-9]{1,3})x([0-9]{1,3}) align=([a-z]+)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#ise""\$this->mycode_parse_img('$5', array('$1', '$2'), '$3');"$message);
        }
        else{
            
$message preg_replace("#\[im(.*)\](https?://([^<>\"']+?))\[/img\]#ise""\$this->mycode_parse_url('$2')\n"$message);
            return 
$message;
        }
    }
    return 
$message
Allerdings funktioniert dieser Code nur bedingt, nämlich dann, wenn nur 1 entsprechend fremd verlinktes Bild vorhanden ist. Dieses wird dann als URL angezeigt.
Sobald aber ein Bild-Link vorhanden ist, der sich auf unser Forum bezieht (Attachment), wird das fremd verlinkte Bild so angezeigt: [Bild: 123.jpg]
Wenn sich z.B. zwei fremd verlinkte Bilder im Beitrag befinden, dann wird der 1. gar nicht mehr angezeigt, der zweite wird richtig, als URL, umgesetzt.

Über einen Hinweis, was da schief läuft oder ob mein Unterfangen aussichtslos ist, wäre ich Euch dankbar. Smile


RE: Fremdverlinkung von Bildern unterbinden - Jockl - 15.01.2011

Ich hatte in dem PHP-Code einen Fehler drin. Jetzt scheint es richtig umgesetzt zu werden. Muss nur noch alle möglichen Fälle durch testen.


RE: Fremdverlinkung von Bildern unterbinden - Jockl - 12.10.2013

Im Zusammenhang mit den Vorbereitungen auf das 1.6.11 Update bin ich gerade über diese Änderung in meiner class_parser.php "gestolpert". In der MyBB Version 1.6.11 wird die preg_replace Funktion durch preg_replace_callback ersetzt. Abgesehen davon, dass ich so meine Verständnisschwierigkeiten mit callback habe, gelingt es mir auch nicht, den o.a. Code so umzuschreiben, dass es mit preg_replace_callback funktioniert. Undecided

Über Unterstützung würde ich mich freuen. Ggf. auch dahingehend, ob denn eine Umstellung auf die Nutzung von callback ein "Muss" ist oder was die Vorteile wären....

Dankeschön Smile


RE: Fremdverlinkung von Bildern unterbinden - StefanT - 12.10.2013

(12.10.2013, 14:54)Jockl schrieb: Über Unterstützung würde ich mich freuen. Ggf. auch dahingehend, ob denn eine Umstellung auf die Nutzung von callback ein "Muss" ist oder was die Vorteile wären....
Der e-Modifier von preg_replace wird in einer zukünftigen PHP-Version entfernt, denn führt kein Weg mehr an einer Code-Änderung vorbei.
https://wiki.php.net/rfc/remove_preg_replace_eval_modifier


RE: Fremdverlinkung von Bildern unterbinden - NetHunter - 12.10.2013

Bewirkt nicht das herausnehmen des Häkchens in der Forenverwaltung -> Forum bearbeiten, bei [img]-Tags erlauben (benötigt eingeschalteten MyCode), genau das was du möchtest?


RE: Fremdverlinkung von Bildern unterbinden - Jockl - 12.10.2013

(12.10.2013, 15:41)StefanT schrieb: Der e-Modifier.....
Auch eines der Themen, das einfach nicht in mein Hirn rein will..... Wink

(12.10.2013, 17:43)NetHunter schrieb: Bewirkt nicht das herausnehmen des Häkchens in der Forenverwaltung -> Forum bearbeiten, bei [img]-Tags erlauben (benötigt eingeschalteten MyCode), genau das was du möchtest?
Nun, das Entfernen des Häkchens bewirkt, dass der MyCode für [img] gar nicht mehr verwendet werden kann. Also auch nicht für die Verlinkung von Bildern der eigenen URL. Es sollte eben nur die Darstellung von Bildern verhindert werden, die fremd verlinkt sind.


RE: Fremdverlinkung von Bildern unterbinden - doylecc - 12.10.2013

Eigentlich müsstest du die Abfrage fast genauso auch in die aktuelle class_parser.php mit den Callbacks einbauen können, nur am Ende des Suchpatterns den e-Modifier entfernen. Du nutzt ja sowieso preg_match und den e-Modifier gibt es (wenn ich mich recht erinnere) explizit nur bei preg_replace.

PHP-Code:
if($options['allow_imgcode'] != 0)
    {
        
$pattern "#\[im(.*)\]http://www.MeineURL.com/(.*?)\[/img\]#is";
        
        if(
preg_match($pattern$message)){
          ...

      }




RE: Fremdverlinkung von Bildern unterbinden - Jockl - 12.10.2013

Danke für Euer Feedback.

Ich hatte es mal so probiert
PHP-Code:
// Convert images when allowed.
if($options['allow_imgcode'] != 0)
{
    
$pattern "#\[im(.*)\]http://www.MeineUrl.com/(.*?)\[/img\]#ise"//sucht nach richtigem Link
    
    //Abfrage neu hinzu
    
if(preg_match($pattern$message)){
        
$message preg_replace_callback("#\[img\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback1'), $message);
        
$message preg_replace_callback("#\[img=([0-9]{1,3})x([0-9]{1,3})\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback2'), $message);
        
$message preg_replace_callback("#\[img align=([a-z]+)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback3'), $message);
        
$message preg_replace_callback("#\[img=([0-9]{1,3})x([0-9]{1,3}) align=([a-z]+)\](\r\n?|\n?)(https?://([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback4'), $message);
    }
    else{
        
$message preg_replace_callback("#\[im(.*)\](https?://([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callbackXXXX'), $message);
    }

wobei ich mir bei "mycode_parse_img_callbackXXXX" nicht sicher bin, was ich da einsetzen müsste oder ob ich dafür extra eine callback-Funktion schreiben müsste. Die Zeilen vor dem else entsprechenden der neuen class_parser.php.
Jedenfalls erhalte ich bei dem Versuch mit dem o.a. Code Fehlermeldungen in dieser Art
Code:
Warning [2] preg_replace_callback(): Requires argument 2, 'postParser::mycode_parse_img_callbackX', to be a valid callback - Line: 402 - File: inc/class_parser.php PHP 5.4.20-1~dotdeb.0 (Linux)
X steht für 1 bis 4


RE: Fremdverlinkung von Bildern unterbinden - doylecc - 12.10.2013

Was du auch machen könntest - deine Seite direkt in die 4 preg_replace_callbacks einfügen. Dann bräuchtest du gar keine Extra-Abfrage:

PHP-Code:
// Convert images when allowed.
        
if($options['allow_imgcode'] != 0)
        {
            
$message preg_replace_callback("#\[img\](\r\n?|\n?)(https?://www.MeineUrl.com/([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback1'), $message);
            
$message preg_replace_callback("#\[img=([0-9]{1,3})x([0-9]{1,3})\](\r\n?|\n?)(https?://www.MeineUrl.com/([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback2'), $message);
            
$message preg_replace_callback("#\[img align=([a-z]+)\](\r\n?|\n?)(https?://www.MeineUrl.com/([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback3'), $message);
            
$message preg_replace_callback("#\[img=([0-9]{1,3})x([0-9]{1,3}) align=([a-z]+)\](\r\n?|\n?)(https?://www.MeineUrl.com/([^<>\"']+?))\[/img\]#is", array($this'mycode_parse_img_callback4'), $message);
        } 



RE: Fremdverlinkung von Bildern unterbinden - Jockl - 12.10.2013

Das wäre auch machbar, allerdings würden dann die fremd verlinkten Bilder nicht mehr als URL ausgeführt sondern als MyCode dargestellt.

Allerdings bin ich gerade ein wenig gefrustet, weil ich merke dass der Parser entsprechend dem ersten Beitrag auch nicht mehr funktioniert. Sad Kann das an der Umstellung von PHP 5.3 auf 5.4 liegen?