PHP: bbcode naar php

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • almostdaily
  • Registratie: September 2005
  • Laatst online: 11-02 10:31
Ik heb wat problemen met een kleine BBCode functie in php die ik wil gebruiken.

Ik wil de mogelijkheid creëren om een slideshow naar keuze in een tekstveld te plaatsen, zoals hieronder aangegeven. Echter, tot nu wordt de php code niet uitgevoerd maar gewoon geprint. Misschien dat dit met veiligheid te maken?


code:
1
[slider]3[/slider]


moet worden:

code:
1
<?php require('inc/_slider.php?id=3) ?>


De functie die ik gebruik ziet er als volgt uit:

code:
1
2
3
4
5
6
7
8
9
10
function bbcode($var) {
    $find = array( 
        "'\[slider\](.*?)\[/slider\]'"
    ); 
    $replace = array( 
        "<?php require('inc/_slider.php?id=\\1) ?>"
    ); 
    $var = preg_replace($find, $replace, $var);
    return $var;
}


Het vervangen gaat dus prima, alleen wordt de php-code niet uitgevoerd maar geprint.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Het element in de $replace array is hier gewoon een string, en dat die string PHP code bevat maakt niets uit.

Als je trucs (bv. eval :X ) gaat uithalen om dit te laten werken, mag je de waarde van id wel iets beter controleren (alleen cijfers matchen, casten naar int, oid), omdat zaken als eval() en dynamische includes icm onvoldoende user input validatie een groot security probleem zijn. Zorg dus eerst voor een strictere input check, voordat je je de rest werkend maakt.

{signature}


Acties:
  • 0 Henk 'm!

  • almostdaily
  • Registratie: September 2005
  • Laatst online: 11-02 10:31
Bedankt. Ik denk dat ik iets anders moet verzinnen. Het levert vrij veel problemen op zo te zien. Heb nog wel dit voorbeeld gevonden, maar het lukt hiermee weer niet om $id door te pasen aan slider.php.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

1: Eval is evil
2: Als je aan het includen bent hoef je id helemaal niet mee te geven.
3: Je kunt de e modifier gebruiken in je reguliere expressies.
4: Het is makkelijker om niet een include te gebruiken, amar gewoon een functie te maken die een slider genereert.
5: eval is evil

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je kan nog steeds gewoon include gebruiken hoor. Je zal alleen éérst moeten matchen, dan een include/file_get_contents moeten doen (die je opslaat in een string) en vervolgens nog een regexp replace doen waarmee je de bbcode door die string vervangt. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.