我正在尝试做一个可以创建个性化标签的 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] 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);
}
?>
为了避免这种情况,我编写了一小部分代码,用相同的 url 更改 href url 部分,但用“+”代替“”空白字符,所以[artist]Lemon Jelly[/artist]应该变成<a href="http://ciao.com/artist/Lemon+Jelly">柠檬果冻</a>
我没有使用 PHP 的经验,我不确定是什么问题,我在其他情况下使用了这种语法而没有遇到问题。
有人可以帮我找出我错的地方吗?
错误类型是 PHP Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in /...