我一直在使用CKEditor wysiwyg编辑器建立一个网站,允许用户使用HTML编辑器添加一些注释.我最终在我的数据库中有一些非常冗余的嵌套HTML代码,这会减慢查看/编辑这些注释的速度.
我的评论看起来像这样(这是一个非常小的例子.我有超过100个嵌套标签的评论):
<p>
<strong>
<span style="font-size: 14px">
<span style="color: #006400">
<span style="font-size: 14px">
<span style="font-size: 16px">
<span style="color: #006400">
<span style="font-size: 14px">
<span style="font-size: 16px">
<span style="color: #006400">This is a </span>
</span>
</span>
</span>
</span>
</span>
</span>
<span style="color: #006400">
<span style="font-size: 16px">
<span style="color: #b22222">Test</span>
</span>
</span>
</span>
</span>
</strong>
</p>
Run Code Online (Sandbox Code Playgroud)
我的问题是:
是否有任何库/代码/软件可以对HTML代码进行智能(即格式识别)清理,删除所有对格式没有影响的冗余标记(因为它们被内部标记覆盖)?我尝试了很多现有的在线解决方案(例如HTML Tidy).他们都没有做我想做的事.
如果没有,我需要编写一些HTML解析和清理代码.我打算使用PHP Simple HTML DOM遍历HTML树并找到所有无效的标签.您是否建议任何其他更适合我的HTML解析器?
谢谢
.
我编写了一些代码来分析我的HTML代码.我拥有的所有HTML标签都是:
<span>
用于font-size
和/或的样式color
<font>
与属性color
和/或size
<a> …
我正在寻找一个好的WYSIWYG编辑器的市场.我的用户打算写的东西就像我现在在Stack Overflow上做的那样,但是他们不像SO用户那样精通技术,所以我需要一个WYSIWYG编辑器而不是这个Markdown编辑器.
功能方面,我希望编辑器具有与此编辑器具有的按钮大致相同的功能,即粗体/斜体/链接/引号/列表(编号/项目符号)/标题.更多功能当然很有趣.
我希望编辑器不要保存为HTML,而是使用其他格式,如BBCode或Markdown.这是因为我想尽量减少用户将脚本或任何其他恶意注入数据库的可能性.
有许多不同的WYSIWYG编辑器,如FCKeditor,TinyMCE等,但不幸的是大多数都保存在HTML中.
虽然TinyMCE有BBCode模式,但我读到TinyMCE 有点臃肿.我偶然发现Markdown WYSIWYG项目似乎或多或少死了.
你有其他建议吗?
如果编辑器是基于jQuery构建的,这是一个加分.
我想知道是否有一种方法可以在JavaScript中使用ungreedy匹配?我尝试了U modifer,但它似乎不起作用.
我想用JavaScript编写一个小的BBCode解析器,但是如果没有ungreedy匹配,就不可能(至少就我所知)做这样的事情:
'[b]one[/b] two [b]three[/b]'.replace( /\[b\](.*)\[\/b\]/, '<b>$1</b>' );
Run Code Online (Sandbox Code Playgroud)
但是这样的替换会很好,因为那时不需要检查HTML有效性.未封闭的标记将保留简单的文本.
当您开发基于Web的应用程序并且希望允许来自用户的格式丰富的文本时,您必须选择如何允许该输入.已经创建了许多不同的标记语言,因为它可能更难以清理HTML.
各种不同标记语言的优点和缺点如下:
或者换句话说,在选择使用特定标记语言时,您会考虑哪些因素.
我有一个phpBB2论坛,帖子存储在BBCode中.论坛帖子在数据库中存储如下:
[quote:e5adceb8e8][quote:e5adceb8e8="Person 2"][quote:e5adceb8e8="Person 3"]Nested quote[/quote:e5adceb8e8]Another nested quote[/quote:e5adceb8e8]Some text[/quote:e5adceb8e8]
[b:e5adceb8e8]Some bold text[/b:e5adceb8e8]
[i:e5adceb8e8]italic text[/i:e5adceb8e8]
[u:e5adceb8e8]underlined text[/u:e5adceb8e8]
[code:1:e5adceb8e8]print ("hello world!");[/code:1:e5adceb8e8]
[img:e5adceb8e8]http://www.google.co.nz/intl/en_com/images/logo_plain.png[/img:e5adceb8e8]
[url]http://google.com[/url]
[url=http://google.com]Google[/url]
[color=darkred:e5adceb8e8]
Coloured text[/color:e5adceb8e8]
[size=18:e5adceb8e8]
Big text[/size:e5adceb8e8]
[list:e5adceb8e8]
List Item 1
List Item 2
[/list:u:e5adceb8e8]
[list:e5adceb8e8]
[*:e5adceb8e8]List Item 1
[*:e5adceb8e8]List Item 2
[/list:u:e5adceb8e8]
[list=1:e5adceb8e8]
[*:e5adceb8e8]List Item 1
[*:e5adceb8e8]List Item 2
[/list:o:e5adceb8e8]
[list=a:e5adceb8e8]
[*:e5adceb8e8]List Item 1
[*:e5adceb8e8]List Item 2
[/list:o:e5adceb8e8]
Run Code Online (Sandbox Code Playgroud)
我正在使用任何可以帮助我将此语法转换为Markdown的工具.理想情况下我只想要转换的[b]
,[i]
,[quote]
,[url]
,[code]
,和[list]
标签.最好将[img]
标记转换为Markdown中的链接,以避免页面调整大小问题.任何纯粹的表示元素(如[color]
和[size]
标签)都将转换为纯文本.
目前我正在解析bbcode服务器端,但我想像这个网站一样显示预览.
如果我使用ajax处理bbcode服务器端,它有点滞后,所以我认为做客户端,只显示预览.
你们知道用javascript编写的任何bbcode解析器吗?
我想在php网站上使用bbcode过滤器.(我正在使用cakephp,它将是一个bbcode助手)我有一些要求.
Bbcodes可以嵌套.所以这样的事情是有效的.
[block]
[block]
[/block]
[block]
[block]
[/block]
[/block]
[/block]
Run Code Online (Sandbox Code Playgroud)
Bbcodes可以有0个或更多参数.
例:
[video: url="url", width="500", height="500"]Title[/video]
Run Code Online (Sandbox Code Playgroud)
Bbcodes可能有多种行为.
让我们说,[url]text[/url]
将被转换为[url:url="text"]text[/url]
或视频bbcode将能够在youtube,dailymotion ....
我认为它涵盖了我的大部分需求.我总是用正则表达式做点什么.但我最大的问题是匹配参数.事实上,我得到嵌套的bbcode工作和bbcode 0参数.但是,当我为参数添加正则表达式匹配时,它与嵌套的bbcode无法正确匹配.
"\[($tag)(=.*)\"\](.*)\[\/\1\]"
//它不是.*但是非gready matcher
我现在没有完整的正则表达式,但我有一些看起来像那样的东西(上图).
那么有没有办法有效地匹配bbcode与正则表达式或其他东西.我唯一能想到的是使用访问者模式并以这种方式将我的文本与每个可能的标签分开,我可以对文本解析有更多的控制权,我可以验证我的文档,所以如果输入文本没有没有有效的bbcode.在保存任何内容之前,我可以通过错误通知用户.
我会使用sablecc来创建我的文本解析器. http://sablecc.org/
有什么好主意吗?或任何可能导致高效灵活的bbcode解析器的东西?
谢谢,抱歉我的英文不好......
我在使用bbcodeplugin和list-items时遇到问题.虽然列表正在按照我想要的bbcode进行安全保护,但在重新打开和编辑文本时,tinymce会在列表中添加额外的标记,以便像
<ul>
<li>one</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
变
<ul>
<ul><li>one</li></ul>
</ul>
Run Code Online (Sandbox Code Playgroud)
所以每个<li>
项目都包含一个<ul>
我想要防止的附加项目.
我怎么可能排除所有列表项被tinymce-javascript修改?
这个问题似乎与"在插入代码时添加BR"这个问题有关,我现在在研究期间曾多次看到这个问题.因为不仅通过tinymce添加了ul标签,而且还添加了br标签.
拜托,有人可以给我任何提示吗?
希望使用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字符串.