我有以下代码用于输出从我的数据库中检索的一些文本:
<p><?php echo nl2br(bb_code($bodytext)); ?></p>
我想要做的是添加“预览”,其中只显示前250个字符左右,然后用户可以点击链接阅读整个内容。像这样:
<p><?php echo nl2br(bb_code(substr($bodytext, 0, 250))); ?>...<br />
<a href="#">Continue reading</a></p>
这里显然有几个问题。
[url=http://www..example.com]link[/url]
在被解释为4时将被解释为39个字符。我该如何做到这一点?
答案 0 :(得分:1)
使用bbCode Playground进行测试时,我注意到bbCode似乎不允许转义,并且只要它与任何代码和格式都不匹配,就会返回括号内的文本。您可能会使用通用方法错误地替换括号中的文本。
以下代码将替换bbCode,查找特定标记。仅当标记允许属性时,它才会检查属性。此外,它仍然会错误地匹配bbCode不会的内容,例如bbCode中的[b]asdasd[b]asdsda[/b]dasd[/b]
会返回asdasd[b]asdsdadasd[/b]
,这将返回asdasdasdsdadasd
。如果你需要更准确的东西,你需要一个解析器。
<?php
function createPreview($text, $limit) {
$text = preg_replace('/\[\/?(?:b|i|u|s|center|quote|url|ul|ol|list|li|\*|code|table|tr|th|td|youtube|gvideo|(?:(?:size|color|quote|name|url|img)[^\]]*))\]/', '', $text);
if (strlen($text) > $limit) return substr($text, 0, $limit) . "...";
return $text;
}
?>
<p><?php echo nl2br(createPreview($bodytext)); ?></p>
我注意到在另一个答案中他们正在寻找感叹号。我不知道那些在bbCode中的意义。如果它很重要,您可以在开始'/\[[\/!]?...
添加它。
以下小提琴显示了它如何与一些示例文本一起使用。
答案 1 :(得分:0)
我会删除BB代码,因为它是预览。
<p><?php echo nl2br(substr(strip_tags(bb_code($bodytext)), 0, 250)); ?>...<br />
<a href="#">Continue reading</a></p>