PHP BB CODE Problem mit htmlspecialchars()

  • Hallo liebe Community,

    ich bin zwar noch nicht angemeldet, aber ich guck mal wie schnell man in diesem Forum eine Antwort bekommt die einem weiterhilft.

    Ich habe folgendes Problem:

    Ich habe für mein PHP Board einen BB Code geschrieben der wie folgt aussieht:

    $message = eregi_replace("\[edit=([^\']+)]([^\[]+)\[/edit\]","<a href=\"#editinfo\" onmouseover=\"Tip('Änderung vom: \\1')\" onmouseout=\"UnTip()\"><font style=\"background-color: #C3EDB2; color: #000000;\">\\2</font></a></font>",$message);

    \\1 ist dementsprechend bei einer Eingabe von [edit=15.12.2005] '15.12.2005'
    Um jedoch diesen BB Code vor Fehleingaben zu schützen, die dann den Javascript-MouseOver-Info-Einblend-Code zerstören, wollte ich das ganze mit einem zusätzlichen htmlspecialchars() füllen.

    Wie bewerkstellige ich dieses Vorhaben genau?

    Mein Versuch mit:

    $message = eregi_replace("\[edit=([^\']+)]([^\[]+)\[/edit\]","<a href=\"#editinfo\" onmouseover=\"Tip('Änderung vom: ".htmlspecialchars(\\1)."')\" onmouseout=\"UnTip()\"><font style=\"background-color: #C3EDB2; color: #000000;\">\\2</font></a></font>",$message);

    Scheitert leider daran, dass \\1 keine Variable ist, dementsprechend auch die Ausgabe nur eine '1' ist.

    Vielen Dank im Vorraus für eure Bemühungen.

    Grüße,

    Saku

  • Zitat


    ich bin zwar noch nicht angemeldet, aber ich guck mal wie schnell man in diesem Forum eine Antwort bekommt die einem weiterhilft.


    Eigentlich sollte man dir dafür überhaupt keine Hilfe geben, denn so ein Satz lässt die Lust am helfen gaaaaanz Schnell schwinden!!!

    P.S.:
    Versuch mal $1, $2....

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Dann verzeih mir diesen Satz bitte.

    Ein $1 oder $1 erzielt leider nicht den selben Effekt wie ein \\1 oder ein \\2

  • Ich kenn mich mit eregi_replace nich so aus. Aber so wies aussieht müsstest du doch mit strpos() und substr() den bereich ausmachen können, indem sich das befindet, was du mit htmlspecialchars(); bearbeiten wilst. Etwa so:

    PHP
    // ungetestet
    $message = eregi_replace("\[edit=([^\']+)]([^\[]+)\[/edit\]","<a href=\"#editinfo\" onmouseover=\"Tip('Änderung vom: \\1')\" onmouseout=\"UnTip()\"><font style=\"background-color: #C3EDB2; color: #000000;\">\\2</font></a></font>",$message);
    $pos=strpos("nderungen vom: ", $message);
    $part1=substr($message, 0, $pos);
    $pos2=strpos("\" onmouseout=\"UnTip()", $message;
    $part2=substr($message, $pos, strlen($message));
    $part3=htmlspecialchars(substr($message, $pos1+strlen("nderungen vom:"), $pos2));
    $message=$part1.$part3.$part2;

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Wieso holst du dir die BBC Parameter nicht über Regular Expressions mit preg_match_all und ersetzte dann deine //1 durch die erreichten $matches[1][0] .. ?

    =)

    wert.TeeeX.de
    Wie gut ist die technische Umsetztung deiner Website wirklich?
    Teste es!