パーソナライズされたタグを作成できる bbcode パーサー クラスを実行しようとしていますが、URL に問題があります。
正規表現のおかげで特に問題なく必要なことはすべて実行しましたが、指定された URL を指す特別なタグを作成しようとすると問題が発生します。
私のクラスでは、次のようなメソッドを追加しました。
<?
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);
}
?>
このコードは、従来の URL [url] http://ciao.com[/url] & [url= http://ciao.com]ciao[/url]で問題なく動作します。
しかし、last.fm スタイルの特別な URL サブジェクト ページの場合に問題があるので、[artist]Lemon Jelly[/artist].
bblink は< a href="http://ciao.com/artist/Lemon Jelly">Lemon Jelly </a> に変換されます (スペース < a> はリンク コードを表示するためだけに使用しました)。
リンクには href 属性に空白があるため、機能しません。
<?
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);
}
?>
これを回避するために、href url 部分を同じ URL に変更するコードの一部を書きましたが、" " 空白文字の代わりに "+" を使用したため、[artist]Lemon Jelly[/artist]は< a href="http://ciao.com/artist/Lemon+Jelly">レモンゼリー</a>
私は PHP の経験がなく、何が問題なのかわかりません。問題が発生することなく、他の状況でこの構文を使用しました。
誰かが私が間違っている場所を見つけるのを手伝ってくれますか?
エラーの種類は PHP 解析エラーです: 構文エラー、予期しない T_LNUMBER、T_VARIABLE または '$' in /... が必要です。