我一直在为 Joomla 编写一个自动处理 HTML 注释的插件,例如。{dropcap}B{/dropcap} 并创建首字下沉样式。
我需要一种将参数传递给插件的方法,因此决定最好的方法是:{dropcap}B|FF00FF|00FF00{/dropcap}。
我创建了一个函数:
if (preg_match_all('/{dropcap}(.+?){\/dropcap}/', $row->text, $matches, PREG_PATTERN_ORDER) > 0)
{
foreach ($matches[0] as $match)
{
$SimpleDropCapPlugin->html = "";
$_temp = preg_replace("/{.+?}/", "", $match);
$_params = explode('|', $_temp);
$SimpleDropCapPlugin->text_dropcap = $_params[0];
if ($_params[1])
$SimpleDropCapPlugin->colour_border = '#' . $_params[1];
if ($_params[2])
$SimpleDropCapPlugin->colour_background = '#' . $_params[2];
if ($_params[3])
$SimpleDropCapPlugin->colour_text = '#' . $_params[3];
if ($_params[4])
$SimpleDropCapPlugin->font_size = $_params[4];
if ($_params[5])
$SimpleDropCapPlugin->font_family = $_params[5];
$SimpleDropCapPlugin->html .= "<span style=\"border: 1px solid " . $SimpleDropCapPlugin->colour_border . "; background: " . $SimpleDropCapPlugin->colour_background . " none repeat scroll 0% 0%; margin-right: 6px; margin-top: 5px; float: left; color: " . $SimpleDropCapPlugin->colour_text . "; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-size: " . $SimpleDropCapPlugin->font_size . "px; line-height: 60px; padding-top: 2px; padding-right: 5px; font-family: " . $SimpleDropCapPlugin->font_family . ";\">";
$SimpleDropCapPlugin->html .= strtoupper($SimpleDropCapPlugin->text_dropcap);
$SimpleDropCapPlugin->html .= "</span>";
$row->text = preg_replace( "#{dropcap}".$_temp."{/dropcap}#s", $SimpleDropCapPlugin->html , $row->text );
}
}
如果我使用'|' 字符脚本可以工作,但每次使用管道字符时都会创建一个单独的 dropcap,而如果我使用不同的分隔符,例如。':' 脚本运行良好。
我绝对想使用管道字符,因为它通常不用于 HTML,因此我可以扩展插件的使用,有没有办法阻止这种奇怪的行为?