Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wieder mal phpBB und BBCodes (https://www.delphipraxis.net/76092-wieder-mal-phpbb-und-bbcodes.html)

faux 29. Aug 2006 19:30


Wieder mal phpBB und BBCodes
 
Hallo!

Sorry, dass ich nochmal was zu phpBB fragen muss, aber ich hoffe mal, dass das die letzte Frage dergleichen sein sollte, für längere Zeit... :oops:

Ich will einfaches HTML ([b], [i], <u>, <s>) in BBCode umwandeln. Dazu habe ich mir ne kleine RegEx geschrieben:
Code:
$text = preg_replace('/<(b|i|u|s)>(.*?)<\/\\1>/si', '[\\1:'.$uid.']\\2[/\\1:'.$uid.']', $text);
Ist das unsicher, wenn ich das so mache? Bzw funktioniert das so überhaupt?

Grüße
Faux

Khabarakh 29. Aug 2006 19:37

Re: Wieder mal phpBB und BBCodes
 
Bei verschachtelten Tags oder falschem HTML-Code bekommst du ein Problem. Letzteres sollte wohl nocht tolerierbar sein ;) .

faux 29. Aug 2006 19:42

Re: Wieder mal phpBB und BBCodes
 
Zitat:

Zitat von Khabarakh
Bei verschachtelten Tags

Ja, das stimmt. Wie könnte ich das umgehen?

Zitat:

Zitat von Khabarakh
oder falschem HTML-Code bekommst du ein Problem.

Kannst du mir so ein Beispiel posten?

Grüße
Faux

yankee 29. Aug 2006 19:43

Re: Wieder mal phpBB und BBCodes
 
Ich habe mir auch mal eine solche Funktion geschrieben. Da bekommst du keine Probleme mit verschachtelten Tags...
Allerdings ist die Optimierung mit der bbcode id die phpbb drin hat nicht drin. Aber das wäre ja leicht zu ergänzen...
Code:
function bbcode($text)
{
  return preg_replace(Array
    (
      '/\[strong\](.+?)\[\/strong\]/',
      '/\[i\](.+?)\[\/i\]/',
      '/\[b\](.+?)\[\/b\]/',
      '/\[u\](.+?)\[\/u\]/',
      '/\[(h[1-6])\](.+?)\[\/\1\]/',
      '/\[img\](.+?)\[\/img\]/',
      '/\[img="(.+)"\](.+?)\[\/img\]/',
      '/\[url=(.+?)\](.+?)\[\/url\]/',
      '/\[google\](.+?)\[\/google\]/e',
      '/(?<=\s)([a-zA-Z]+?:\/\/[^\s"]+?)(?=\s)/'
    ),Array
    (
      '[b]\1[/b]',
      '[i]\1[/i]',
      '[b]\1[/b]',
      '<u>\1</u>',
      '<\1>\2</\1>',
      '[img]\1[/img]',
      '[img]\2[/img]',
      '[url="\1"]\2[/url]',
      '\'[url="http://www.google.de/search?q=\'.urlencode(\'\1\').\'"]\1[/url]\'',
      '[url="\1"]\1[/url]'
    ), $text);
}
EDIT:
Zitat:

Zitat von Khabarakh
Bei verschachtelten Tags oder falschem HTML-Code bekommst du ein Problem. Letzteres sollte wohl nocht tolerierbar sein ;) .

Wie soll man denn da zu falschem HTML kommen...?

EDIT2: Der google-tagt kann zu einer Sicherheitslücke führen, wenn du ' nicht escaped hast.

alcaeus 29. Aug 2006 19:53

Re: Wieder mal phpBB und BBCodes
 
@yankee: "bloedes" HTML kanns geben, weil er einfaches HTML in BBCodes umwandeln will. Du hast den umgekehrten Vorgang gepostet ;)

@faux: wenn du das im phpBB machst, bedenke dass htmlspecialchars() ausgefuehrt wird. Du darfst also nicht nach < und > suchen, sondern musst nach &lt; und &gt; suchen.

Greetz
alcaeus

Khabarakh 29. Aug 2006 20:10

Re: Wieder mal phpBB und BBCodes
 
Zitat:

Zitat:

Zitat von Khabarakh
oder falschem HTML-Code bekommst du ein Problem.

Kannst du mir so ein Beispiel posten?
Code:
<a>
:zwinker:
Zitat:

Zitat von faux
Zitat:

Zitat von Khabarakh
Bei verschachtelten Tags

Ja, das stimmt. Wie könnte ich das umgehen?

Wenn es bei den vier Tags bleibt, kannst du einfach alle "<x>" (bzw. &lt;x&gt;)durch "[x]" und alle "</x>" durch "[/x]" ersetzen :zwinker: .

faux 29. Aug 2006 20:42

Re: Wieder mal phpBB und BBCodes
 
Zitat:

Zitat von Khabarakh
Zitat:

Zitat:

Zitat von Khabarakh
oder falschem HTML-Code bekommst du ein Problem.

Kannst du mir so ein Beispiel posten?
Code:
<a>

WENN sowas darin vorkäme (kommt es nicht), sollte es 1:1 im Post stehen.

@alcaeus: Mache ich nicht, trotzdem danke für den Hinweis.

Habs so gelöst, funktioniert genau so wie ich will. Danke yankee für den Tipp mit dem Array im preg_replace:
Code:
$text = preg_replace(array
   (
      '/<(b)>(.*?)<\/\\1>/si',
      '/<(i)>(.*?)<\/\\1>/si',
      '/<(u)>(.*?)<\/\\1>/si'
   ), '[\\1:'.$uid.']\\2[/\\1:'.$uid.']', $text);
Grüße
Faux

alcaeus 29. Aug 2006 21:00

Re: Wieder mal phpBB und BBCodes
 
Zitat:

Zitat von faux
@alcaeus: Mache ich nicht, trotzdem danke für den Hinweis.

Na dann aua:
Code:
Dies ist ein Test. [url="index.php"]Klick mich mal an[/url]
htmlspecialchars() brauchst du, damit kein HTML eingeschleusst werden kann. Frueher oder spaeter muss es rein, ich hoffe du machst es wenigstens nachher ;)

Greetz
alcaeus

faux 30. Aug 2006 00:36

Re: Wieder mal phpBB und BBCodes
 
Zitat:

Zitat von alcaeus
Na dann aua:
Code:
Dies ist ein Test. [url="index.php"]Klick mich mal an[/url]
htmlspecialchars() brauchst du, damit kein HTML eingeschleusst werden kann. Frueher oder spaeter muss es rein, ich hoffe du machst es wenigstens nachher ;)

Natürlich hab ich das im Code: ;)
Code:
$text = preg_replace(array
   (
      '/<br *\/?>/si', // New lines
      '/<font +color=(\'|")(#FF0000)\\1.*?>(.*?)<\/font>/si', // Font color
      '/<(b)>(.*?)<\/\\1>/si',
      '/<(i)>(.*?)<\/\\1>/si',
      '/<(u)>(.*?)<\/\\1>/si'
   ), array(
      "\n",
      '[color=\\2:'.$uid.']\\3[/color:'.$uid.']',
      '[\\1:'.$uid.']\\2[/\\1:'.$uid.']'
   ), $text);

[color=#FF0000]// Escape slashes
$text = addslashes(htmlspecialchars(trim($text)));
$title = addslashes(htmlspecialchars(trim($title)));[/color]
Desweiteren ists irrelevant, da kein User (oder Admin) Zugriff auf meine Funktion hat. Die Funktion ist rein für SQL-Error-Reporting da. ;)

Danke für die Aufmerksamkeit. :)

Grüße
Faux


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 Uhr.

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