希望使用PHPBB3的函数解析PHP中的BB代码.我到目前为止:
<?php
include_once("../../forum/includes/functions_content.php");
$text = "[b]bold text here[/b] not bold here";
$uid = $bitfield = $options = '';
echo("parsing");
echo generate_text_for_storage($text, $uid, $bitfield, $options, true, true, true);
echo("finished");
?>
Run Code Online (Sandbox Code Playgroud)
然而它回声parsing但在此之后不会继续.我期待输出符合以下几点:
<b>bold text here</b> not bold here
Run Code Online (Sandbox Code Playgroud)
任何帮助非常感谢!
编辑
没有答案仍然有效.我正在寻找一个独立的 php页面,它使用PHPBB3的BBCode解析器将BB代码字符串转换为HTML字符串.
我维护一个公告板,以HTML格式保存富文本消息.现在我需要将所有这些消息迁移到需要BBCode表示HTML的Joomla Kunena公告板中.
是否有任何库可以干净地将HTML转换为BBCode.有很多脚本用于BBCode到HTML但不是相反的方式.
谢谢...
我在PHP中编写了一个注释解析函数.
由于BBCode不是真正的标记语言,我从不喜欢写作风格.
所以我让访问者能够在评论表单中使用基本的HTML代码.
在发布时,PHP将检查不允许的和无效的标签/属性,并替换或删除它们.
我相信它做的工作与BBCode完全相同.
如果这是真的,为什么有BBCode?BBcode比HTML更有优势吗?
单色回答
如果您确信HTML过滤器足够安全,那么您应该没问题
好吧,我不自信地编写过滤器,但是有一些顶级的过滤器,如PHP Simple HTML DOM Parser,HTML Purifier,htmLawed ......
BBCode由UBB开发并且仍在广泛使用,例如phpBB.
来自UBB/phpBB的开发人员对他们编写完美HTML过滤器的技巧没有信心吗?(我猜不会)
另外,就像StackOverflow使用的Markdown一样......如果HTML + Parser完成这项工作,为什么要发明另一种"语言"呢?(除了保存几位......)
假设我想渲染/呈现以某种形式传输的文本lightweight markup language.是否有任何现成的库Android,它们以轻量级标记语言作为输入文本并很好地呈现它?当我说轻量级标记语言时,我指的是Markdown(http://en.wikipedia.org/wiki/Markdown)或类似的东西.
我有一个bbcode - > html转换器,它响应textarea中的change事件.目前,这是使用一系列正则表达式完成的,并且存在许多病理情况.我一直想在这个语法上磨铅笔,但不想进入牦牛剃须.但是......最近我开始意识到pegjs,这似乎是PEG解析器生成的一个非常完整的实现.我已经指定了大部分语法,但现在我想知道这是否适合使用完整的解析器.
我的具体问题是:
由于我的应用程序依赖于将我能够转换为HTML并将其余内容保留为原始文本,因此使用可能在语法错误上失败的解析器实现bbcode是否有意义?例如:[url=/foo/bar]click me![/url]一旦输入关闭标记上的结束括号,肯定会成功.但是在此期间用户会看到什么?使用正则表达式,我可以忽略不匹配的东西,并将其视为普通文本以用于预览目的.使用正式语法,我不知道这是否可行,因为我依赖于从解析树创建HTML以及解析失败的原因是什么?
我不清楚应该在哪里进行转换.在正式的基于lex/yacc的解析器中,我将有头文件和符号表示节点类型.在pegjs中,我得到了带有节点文本的嵌套数组.我可以将翻译后的代码作为pegjs生成的解析器的一个动作发出,但是它似乎是一种将解析器和发射器组合在一起的代码气味.但是,如果我打电话PEG.parse.parse(),我会收到这样的话:
Run Code Online (Sandbox Code Playgroud)[
[
"[",
"img",
"",
[
"/",
"f",
"o",
"o",
"/",
"b",
"a",
"r"
],
"",
"]"
],
[
"[/",
"img",
"]"
]
]
给出如下语法:
document
= (open_tag / close_tag / new_line / text)*
open_tag
= ("[" tag_name "="? tag_data? tag_attributes? "]")
close_tag
= ("[/" tag_name "]")
text
= non_tag+
non_tag
= [\n\[\]]
new_line
= ("\r\n" / "\n")
Run Code Online (Sandbox Code Playgroud)
当然,我正在缩写语法,但你明白了.所以,如果你注意到,数组数组中没有上下文信息告诉我我有什么样的节点,即使解析器已经完成了这个,我还是要再次进行字符串比较.我希望在解析期间可以定义回调并使用操作来运行它们,但是网上很少有关于如何做到这一点的信息.
我吠叫错了树吗?我应该回到正则表达式扫描并忘记解析吗?
谢谢
我正在使用CKEditor和BBCode插件,我需要添加自定义标签,如spoiler标签和另一个可以链接到网站用户的个人资料.
spoiler标签将像blockquote标签一样工作:单击按钮并获取代码.我复制blockquote/plugin.js和更改所有blockquote字符串spoiler,并quote到spoil.然后我添加extraPlugins: 'spoiler'了配置和工具栏上的一个按钮.它看起来正确,但它生成错误的代码.
例如,如果在选择文本后单击blockquote按钮,则会生成以下代码:
[quote]some text[/quote]
Run Code Online (Sandbox Code Playgroud)
但是当我点击我的新按钮时,我得到以下代码:
<p>
<spoiler>
<p>
!!!</p>
</spoiler></p>
Run Code Online (Sandbox Code Playgroud)
所以它不起作用.
我还想创建一个链接到用户的按钮.它应该是这样的:点击按钮后,会出现一个带有搜索字段的对话框(AJAX不是问题),结果将是用户列表; 当选择用户并OK单击按钮时,它将生成如下代码:
[user=1]Admin[/user]
Run Code Online (Sandbox Code Playgroud)
1 - 用户ID,管理员 - 他的名字.
我目前正在一个网站上工作,用户可以用很少的格式编写文章(如粗体,斜体,列表......).我正在使用一个框架:CodeIgniter.
我是初学者,我听说过一些关于XSS的东西.我想知道您对我的实施情况有何看法.我读到了这个主题: 用PHP清理用户输入的最佳方法是什么?
1)用户写他的文章,用BBCode格式化.我正在使用SCEditor.
2)当将其保存到数据库中时,我使用htmlspecialchars()来过滤任何可疑的HTML标记.我在保存数据或显示数据时应该这样做吗?
3)当我想在网站上显示文章时(例如用于其他用途),我将BBCode标签转换为HTML标签.
这是一种正确的方法吗?我是否避免使用XSS?
我显然对这些建议和建议持开放态度.
谢谢你的回答
我正在测试MarkItUp!MVC应用程序中的富文本编辑器,除预览外,一切都运行良好.在设置(set.js)中,有一个previewParserPath属性(" BBCode解析器的路径").在与MVC应用程序的正确集成方面,我不确定这是在寻找什么.
我相信这个属性允许渲染文本显示为HTML而不是[code][/code]等等.
在我的控制器中,我创建了以下内容:
[AcceptVerbs(HttpVerbs.Get)]
[ValidateInput(false)]
public String ParseCode(string toBeParsed)
{
return BBCode.ToHtml(toBeParsed);
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找Javascript或PHP中的BBCode解析器,而无需使用Regex.谁能建议我一个好人?
我正在为一个论坛开发一个应用程序.
我需要一个像Tapatalk那样的剧透按钮
隐藏文本部分,仅在用户单击按钮时显示.
我收到了帖子的所有文字,包括剧透BBCode.我已设法通过以下正则表达式获取扰流板的内容:
\[SPOILER\](.+?)\[\/SPOILER\]
Run Code Online (Sandbox Code Playgroud)
我的问题是我想添加一个剧透按钮,但我的所有文本都是类似HTML的,因为每个对象(图像,链接,格式代码等等)都是用HTML翻译的,然后由Android用Html方法处理.fromHtml().
这是解析方法,将BBCode"转换"为HTML:
private static String parsePostContent(String text){
String html = text;
Map<String,String> bbMap = new HashMap<>();
bbMap.put("(\r\n|\r|\n|\n\r)", "<br/>");
bbMap.put("\\[b\\](.+?)\\[/b\\]", "<strong>$1</strong>");
bbMap.put("\\[i\\](.+?)\\[/i\\]", "<span style='font-style:italic;'>$1</span>");
bbMap.put("\\[u\\](.+?)\\[/u\\]", "<span style='text-decoration:underline;'>$1</span>");
bbMap.put("\\[h1\\](.+?)\\[/h1\\]", "<h1>$1</h1>");
bbMap.put("\\[h2\\](.+?)\\[/h2\\]", "<h2>$1</h2>");
bbMap.put("\\[h3\\](.+?)\\[/h3\\]", "<h3>$1</h3>");
bbMap.put("\\[h4\\](.+?)\\[/h4\\]", "<h4>$1</h4>");
bbMap.put("\\[h5\\](.+?)\\[/h5\\]", "<h5>$1</h5>");
bbMap.put("\\[h6\\](.+?)\\[/h6\\]", "<h6>$1</h6>");
bbMap.put("\\[quote\\](.+?)\\[/quote\\]", "<blockquote>$1</blockquote>");
bbMap.put("(?s)^\\[quote name=\"([^\"]+)\".*\\](.+)\\[\\/quote\\]", "<span style='font-style:italic;'>Citazione di: $1</span> <blockquote>$2</blockquote>");
bbMap.put("\\[p\\](.+?)\\[/p\\]", "<p>$1</p>");
bbMap.put("\\[p=(.+?),(.+?)\\](.+?)\\[/p\\]", "<p style='text-indent:$1px;line-height:$2%;'>$3</p>");
bbMap.put("\\[center\\](.+?)\\[/center\\]", "<div align='center'>$1");
bbMap.put("\\[align=(.+?)\\](.+?)\\[/align\\]", "<div align='$1'>$2");
bbMap.put("\\[color=(.+?)\\](.+?)\\[/color\\]", "<span style='color:$1;'>$2</span>");
bbMap.put("\\[size=(.+?)\\](.+?)\\[/size\\]", "<span style='font-size:$1;'>$2</span>");
bbMap.put("\\[img\\](.+?)\\[/img\\]", "<img src='$1' />");
bbMap.put("\\[img=(.+?),(.+?)\\](.+?)\\[/img\\]", "<img width='$1' …Run Code Online (Sandbox Code Playgroud)