Frage

Ich versuche, eine bbcode Parser-Klasse zu tun, die personalyzed Tags erstellen kann, aber ich habe ein Problem mit URLs

Ich habe alles, was ich habe, ohne besondere Probleme durch reguläre Ausdrücke müssen, aber ich habe ein Problem, wenn ich versuche, einen speziellen Tag, die auf eine bestimmte URL verweisen zu erstellen.

In meiner Klasse habe ich eine Methode wie folgt hinzugefügt:

<?
    private function check_url_from_bbcode ($tag = "url", $css = null, $url_path = null) {
        $regex_url = " a-zA-Z0-9\:\/\-\?\&\.\=\_\~\#\'";
        if (!isset ($css)) $css = $this->css_link;
        $regex_url = $this->regex_url;
        if (isset ($url_path)) $url_path = "$url_path/";
        $this->bbcode = preg_replace ("/\[$tag\]([$regex_url]*)\[\/$tag\]/", "<a title=\"Vai al link\" class=\"$css\" href=\"$url_path$1\">$1</a>", $this->bbcode);
        $this->bbcode = preg_replace ("(\[$tag\=([$regex_url]*)\](.+?)\[/$tag\])", "<a title=\"Vai al link\" class=\"$css\" href=\"$url_path$1\">$2</a>", $this->bbcode);
    }
?>

der Code funktioniert gut mit klassischen URLs [url] http://ciao.com [/ url] & [url = http://ciao.com] ciao [/ url]

, aber ich habe ein Problem mit dem Fall einer speziellen URL Thema Seite als last.fm Stil, so [Künstler] Lemon Jelly [/ artist].

Die bblink umgewandelt in Lemon Jelly (Ich habe die Räume verwendet nur den Link Code zu erhalten).
Der Link, um die Whitespaces auf dem Attribut href hat, kann so nicht nie funktionieren.

<?
    private function check_url_from_bbcode ($tag = "url", $css = null, $url_path = null) {
        $regex_url = " a-zA-Z0-9\:\/\-\?\&\.\=\_\~\#\'";
        if (!isset ($css)) $css = $this->css_link;
        $regex_url = $this->regex_url;
        if (isset ($url_path)) $url_path = "$url_path/";
        // begin of the problem
        $this->bbcode = preg_replace ("/\[$tag\]([$regex_url]*)\[\/$tag\]/", "<a title=\"Vai al link\" class=\"$css\" href=\"$url_path".str_replace (" ", "+", $1)."\">$1</a>", $this->bbcode);
        // end of the problem
        $this->bbcode = preg_replace ("(\[$tag\=([$regex_url]*)\](.+?)\[/$tag\])", "<a title=\"Vai al link\" class=\"$css\" href=\"$url_path$1\">$2</a>", $this->bbcode);
    }
?>

Um dies zu vermeiden, habe ich einen kleinen Teil des Codes geschrieben, die den href URL Teil mit tha gleichen URL ändern, aber mit „+“ anstelle von „“ Leerzeichen char, so [Künstler] Lemon Jelly [/ Künstler] sollte sich Lemon Jelly

Ich bin nicht mit PHP erlebt und ich bin nicht sicher, was das Problem ist, ich habe verwendet diese Syntax in anderer Situation ohne Begegnung das Problem.

kann mir jemand helfen zu finden, wo ich falsch?

der Fehlertyp ist PHP Parse error: syntax error, unerwartete T_LNUMBER, erwartet T_VARIABLE oder '$' in /...

War es hilfreich?

Lösung

Der Parse-Fehler ist aufgrund der Tatsache, dass $1 Name keine gültige PHP-Variable ist. Sie müssen mit einem Buchstaben oder einem Unterstrich beginnen. Die $1 Variable in den preg_replace Parameter bevölkert sind nur gültig innerhalb der Parameter.

Versuchen Sie, etwas mehr wie folgt aus:

$this->bbcode = preg_replace("/\[$tag\]([$regex_url]*)\[\/$tag\]/e", "'<a title=\"Vai al link\" class=\"$css\" href=\"$url_path'. str_replace(' ', '+', '$1'). '\">$1</a>'", $this->bbcode);

Der e Modifikator wertet den Ersatz-String als PHP-Code, so dass die Zeichenfolge erzeugen sollten Sie wollen.

Beachten Sie, kann ich es jetzt nicht testen, so dass Sie es ein bisschen zwicken müssen. Leider]
Bearbeiten Es macht nichts, dass ich einen Einfluß von einem FTP-Client bekam. die Regex behoben. Es funktioniert:)

Andere Tipps

Bitte geben Sie die 2-3 Zeilen vor und nach der Zeile, die den Fehler (Zeilennummer hat, soll in den PHP-Parser-Fehlern sein.

Das klingt nicht wie ein Regex Problem ... eher wie eine Flucht Ausgabe.

Ich bin ziemlich neu zu SO, warum nur auf die Frage nicht konnte ich bemerken dies zu fragen (wie das, was i schrieb nicht wirklich eine Antwort)

  

Um dies zu vermeiden, habe ich schrieb eine kleine   Teil des Codes, der die href-URL ändern   Teil mit tha gleichen URL aber mit „+“   anstelle von "„

Warum nicht benutzen urlencode auf den Inhalt des Tags?

, dass urlencode Hinweis sollte nur für Abfrageparameter verwendet werden; aktuelle Verzeichnis Komponenten sollten verwenden rawurlencode , wie HTTP selbst nicht nicht verwendet + anstelle von Leerzeichen.

Ich glaube, das Problem mit der $ 1-Referenz ist, die in der str_replace Funktion außerhalb der preg_replace Argumente verwendet wird. Die Rückreferenzierung $ 1 funktioniert nur innerhalb der Grenzen des preg_replace Argumente, so dass Sie es nicht wie eine Variable übergeben str_replace; es versucht, $ 1 als eine Variable zu verwenden, aber in PHP, die für einen Variablennamen ungültig ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top