Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 3 Gast/Gäste
Fremdverlinkung von Bildern unterbinden
#1
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
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#2
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.
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#3
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
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#4
(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_rep...l_modifier
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#5
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?
Zitieren
#6
(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.
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#7
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)){
          ...

      }

Zitieren
#8
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
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#9
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);
        } 
Zitieren
#10
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?
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Thread anzeige per Hook unterbinden? baeckerman83 5 2.260 09.09.2015, 13:11
Letzter Beitrag: baeckerman83
  FancyZoom bei allen Bildern Abys 2 1.695 26.04.2015, 00:48
Letzter Beitrag: MrBrechreiz
  anonymen Foren-Login unterbinden Manni 2 1.685 16.01.2010, 14:32
Letzter Beitrag: Manni
  Inventory Shop - 1.1.0 RC2 by Ryan Ashbrook - mit Bildern!? sleepoholic 0 1.360 17.11.2007, 22:26
Letzter Beitrag: sleepoholic
  [Gelöst]Eigene Antwort unterbinden Jan 22 8.772 01.04.2006, 12:43
Letzter Beitrag: Garlant