Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Hide BBCode parsen (https://www.delphipraxis.net/77101-%5Bphp%5D-hide-bbcode-parsen.html)

Zacherl 14. Sep 2006 16:22


[PHP] Hide BBCode parsen
 
Hi,
ich versuche grade einen Hide BBCode für mein Forum (php-fusion) einzurichten ... ich dachte mir da folgendes:

Code:
[hide=Benutzername]Text[/hide]
sollte den Text für alle außer Benutzername verbergen.

Code:
$text = preg_replace('#\[hide=([\r\n]*)([^\s\'\";\+]*?)\](.*?)([\r\n]*)\[/hide\]#si', '\2', $text);
Problem:
:arrow: Irgendwie scheint meine Suchmaske nicht so ganz zu funktionieren
:arrow: Wie komme ich an den Wert von /1, der dann den Usernamen enthalten soll-

Zacherl 14. Sep 2006 16:24

Re: [PHP] Hide BBCode parsen
 
Gibts nicht ... andauernd verwende ich Zit anstatt Edit :wall:

Meflin 14. Sep 2006 16:51

Re: [PHP] Hide BBCode parsen
 
Wie wärs damit?
Code:
\[hide=([a-zA-Z0-9]*?)](.*)\[/hide\]
funktioniert auf jeden fall, ich weis nur nicht ob es auch alle Einschränkungen implementiert die du haben willst...


Zacherl 14. Sep 2006 17:43

Re: [PHP] Hide BBCode parsen
 
Habs jetzt so gelöst, fals es jemanden interessiert:
Code:
global $userdata;
   
   preg_match_all("#\[show=(.*?)\](.*?)\[/show\]#si", $text, $matches, PREG_PATTERN_ORDER);

   for($i=0; $i<count($matches[0]); $i++)
   {
     $hiddenquery = dbquery("SELECT post_author FROM ".DB_PREFIX."posts WHERE thread_id = '".$_GET['thread_id']."' AND post_author = '".$userdata['user_id']."'");
     $hiddendata = dbarray($hiddenquery);

     if ((strtolower($userdata['user_name']) == strtolower($matches[1][$i])) or ($userdata['user_id'] == $hiddendata['post_author']))
     {
       $text = str_replace($matches[0][$i], $matches[2][$i], $text);
     }
       else
     {
       if ($userdata['user_id'] == 1)
       {
         $text = str_replace($matches[0][$i], "<font color='red'>[" . $matches[1][$i] . ": " . $matches[2][$i] . "]</font>", $text);
       }
         else
       {
         $text = str_replace($matches[0][$i], '', $text);
       }
     }
   }
Florian

alcaeus 14. Sep 2006 17:52

Re: [PHP] Hide BBCode parsen
 
Zitat:

Zitat von Florian Bernd
Code:
preg_match_all("#\[show=(.*?)\](.*?)\[/show\]#si", $text, $matches, PREG_PATTERN_ORDER);

.*? sollte man so wenig wie moeglich verwenden. Warum versuchst du auch, alles zu matchen?

Das:
Code:
preg_match_all("#\[show=([^\[\]]*?)\](.*?)\[/show\]#si", $text, $matches, PREG_PATTERN_ORDER);
ist ein Beispiel wie du es nachen koenntest. Du solltest eigentlich nur das matchen, was auch in den Benutzernamen vorkommen kann. Alles zu matchen ist vollkommen fehl am Platz, wird aber trotzdem oft verwendet.

Greetz
alcaeus

Zacherl 14. Sep 2006 17:55

Re: [PHP] Hide BBCode parsen
 
Okey, dann werde ich das anpassen ... ich kenne mich nicht so gut mit PHP aus ... was wird denn bei diese Abfrage alles gematcht: ([^\[\]]*?)

Florian

alcaeus 14. Sep 2006 17:57

Re: [PHP] Hide BBCode parsen
 
Alles ausser [ und ], die sollten schliesslich nicht im Benutzernamen vorkommen, denn selbst wenn sie das koennten, wuerdest du den Benutzernamen nie korrekt matchen koennen ;)
Du kannst das natuerlich noch weiter einschraenken, je nachdem was du alles im Benutzernamen erlaubst ;)

Greetz
alcaeus

Zacherl 14. Sep 2006 18:00

Re: [PHP] Hide BBCode parsen
 
Cool ... dankeschön.

Florian


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz