- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 PECL bbcode 扩展来定义一组允许用于论坛的标签。我已经实现了 http://www.bbcode.org 中描述的几乎所有标签。 .
论坛用户已经开始期望当他们在输入字段中换行时,他们的帖子也会换行。我正在努力实现这一目标。
nl2br()
方式 nl2br()
非常适合让浏览器在用户键入时采用换行符,因为它会找到换行符并抛出 <br />
那里的标签使浏览器也换行。但这会给一些更复杂的标记带来麻烦。
例如:
[ul]
[li]list item 1[/li]
[li]list item 2[/li]
[/ul]
结果
<ul><br />
<li>list item 1</li><br />
<li>list item 2</li><br />
<ul>
它会在任何地方抛出空白。出于同样的原因,表格也有类似的问题。此外,任何实际显示空白的标签(例如 <pre><code>code goes here</code></pre>
)都会变成双倍行距。恶心。
CSS 有 white-space
在这些情况下可以派上用场的规则。如果我们将所有论坛帖子放在 .bbcode
中元素,然后只包含样式表规则
.bbcode {
white-space: pre-line;
}
然后浏览器将保留换行符、折叠其他空格并换行。这听起来很理想。但是,列表项等仍然会出现双倍行距问题,因为浏览器会在每个 </li>
之后显示换行符。 .
我们可以通过定义以下内容来解决一些问题:
.bbcode {
white-space: pre-line;
}
.bbcode * {
white-space: normal;
}
这减轻了列表和表格中的问题。但是,现在换行符只出现在帖子的根元素中,所以换行符例如表格单元格不起作用。
我真正想要的是两种效果的结合:
理想情况下,我认为[li]some\ntext[/li]
应该导致两行,[li]sometext[/li]\n
应该只会产生一行,并且 [i]sometext[/i]\n
应该导致两行。
这样的事情是怎么做到的?或者更确切地说,人们通常在使用 bbcode 的论坛中做什么?我可能会写一个函数,在其中定义所有 <br />
的情况。应该插入,这有强烈的重新发明许多轮子的味道。
最佳答案
我现在确定的是
nl2br-str_replace
方式$html = nl2br(bbcode_parse($handler, htmlentities($bbcode_string)));
$html = str_replace(
array('</div><br />', '<tr><br />', '</tr><br />', '<th><br />', '</th><br />', '<td><br />', '</td><br />', '<ul><br />', '</ul><br />', '<ol><br />', '</ol><br />', '<li><br />', '</li><br />', '</pre><br />'),
array('</div>', '<tr>', '</tr>', '<th>', '</th>', '<td>', '</td>', '<ul>', '</ul>', '<ol>', '</ol>', '<li>', '</li>', '</pre>'), $html);
return $html;
和 CSS:
.bbcode pre br {
display: none;
}
这是怎么回事?我不是定义我想要换行符的位置,而是定义我知道它们会在哪里但我不想要它们的位置。
CSS 防止 pre
中的双倍行距元素(并且您需要添加任何其他从空格中获取换行符的元素)。 PHP 摆脱了由用户在例如之间放置换行符引起的换行符。 [li]stuff[/li]
元素。
这很脆弱:如果用户在 [/li] 之后和换行符之前键入一个空格,<br />
不会被删除。我或许可以使用正则表达式来查找 [tag][whitespace]<br />
但我不认为这是一个大问题。
我现在接受这个答案,因为它是我在过去几天能够想到或找到的最好答案。如果其他人知道更好的解决方案,请发布,我很乐意接受。
关于css - 应该如何处理 bbcode 中的换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28778928/
基本上,我正在尝试将 xenforo 的论坛脚本数据库转换为我的自定义数据库(放弃我在 xenforo 上的使用),他们的 bbcode 让我很烦。 我正在尝试将他们的所有 url bbcode 更改
好吧,让我解释一下我的意思是哪种“剧透标签”: 在我所在的 phpBB 论坛中,有一个 [剧透] BBCode 隐藏了里面的文本,有一个显示/隐藏的按钮,应该看起来像发布页面中的 prosilver
所以我创建了这个函数来替换字符串中的特殊字符。主要目的是替换 BBCode 标签内的那些特殊字符([code=any]我想显示的代码[/code]),但当时它是否替换其余部分并不重要BBcode 标签
我有一些 javascript 会变成 [b]test[/b]进入 test 还有,这个 [i]test 2[/i]会变成 test 效果很好,但我也需要能够对其进行解码。对于多种类型的 bbcode
这是脚本的 jQuery 变体(它不起作用): $("div.post-content").each(function(){ if($(this).innerHTML.indexOf("[/
我有一个字符串想要转换为 div,但它无法正确关闭 div。 我使用的示例字符串是这样的: [quote]Quote by: user1 [quote]Quote by: user2 ads[/quo
我有这个函数来解析 bbcode -> html: $this->text = preg_replace(array( '/\[b\](.*?)\[\/b\]/ms', '/\[i
我正在尝试找到一种从字符串中删除 BBCode 的方法。我发现的模块(BBCode 和 Post Markup)似乎只将它们转换为 HTML,而不是仅仅删除 BBCode 并返回一个干净的字符串。如果
我在装有最新操作系统的 mac book air 上使用最新版本的 chrome 浏览器。我正在尝试在 javascript 中创建一个 BBcode 解析器。我可以很容易地解析一行代码,例如 [b]
我编写了一个 Javascript bbcode,类似于我用来编写此消息的代码。它还包含一个实时预览框,如下图所示。我目前面临的唯一问题是某些嵌套的 bbcode 未解析。 例如: [quote]
我需要一个正则表达式来去除字符串中的任何 BBCode。我有以下内容(和一个带有标签的数组): new RegExp('\\[' + tags[index] + '](.*?)\\[/' + tags
我有一个非常简单的 Javascript BBCode 解析器用于客户端实时预览(不想为此使用 Ajax)。问题是,这个解析器只识别第一个列表元素: function bbcode_parser(st
因此,我正在尝试向我的网站 (bbCodes) 添加笑脸符号,但我不知道该怎么做。我的数据库中有所有笑脸触发词和输出,以便更轻松地删除/添加笑脸。 下面的这段代码什么都不做...我没有收到错误,它也没
我已经阅读过有关此主题的其他帖子,但似乎没有一个有帮助。 好的,我正在编写自己的 BBCode 解析器。现在我的问题是如何不解析 [code] 标签之间的 BBCode?我真的不知道该怎么做。这是我当
所以看起来这个问题已经被问到太阳下的几乎所有语言......除了 C++。我有一个 XML 文档,在文本节点中存储了一些 bbcode。我正在寻找删除它的最佳方法,我想我会在这里查看是否有人知道一些预
我编写了一个 Javascript bbcode,类似于我用来编写此消息的代码。它还包含一个实时预览框,如下所示。我目前面临的唯一问题是某些嵌套的 bbcode 无法解析。 例如: [quote]
我正在使用 BBcode 编辑器通过表单发布内容。当我通过按 Enter 键然后发送表单并在屏幕上打印发送的文本来创建新行时,所有内容都在一行中,并且没有 BBcode 代表它。起初我以为我使用的编辑
我目前正在尝试测试匹配以下内容的正则表达式模式: [#123456] [#aabc36] 然后转换成HTML代码: 但是如果模式像这样: [/#123456] 然后被替换为 我尝试了以下模式: \
我有这个正则表达式: \[code(?:=(["']?)(.{0,50}?)\1)?\](?!\s*\[\/code\])(.*?)\[\/code\] 这个正则表达式应该支持: [code]cont
我正在研究 bbcodes 的自定义实现(基本上是 Wordpress 短代码)。为此,我需要匹配可以在两个类似 bbcode 的标签之间找到的内容。 例如: [example]The content
我是一名优秀的程序员,十分优秀!