在我的网络应用程序中,我正在开发一个评论功能,用户可以在其中发表评论。但我遇到的问题是我想在评论框中允许简单的HTML标记。像<b>, <strong>, <i>, <em>, <u>,
等HTML标记,通常允许在评论框中输入。但是我也想要当用户按下enter然后它会自动转换成中断(<br />
标签)并存储到数据库中,这样当我在网页中显示它们时它们看起来就像用户输入。
您能告诉我如何解析用户输入的唯一一组HTML标签以及如何转换成<br />
标签,然后将它们存储在数据库中。
或者,如果有人有更好的想法或建议来实现这种功能。我正在使用ASP.NET 2.0(C#)
我注意到StackOverflow.com在Profile Editing上做了同样的事情。当我们编辑我们的配置文件然后在“关于我”字段“基本HTML允许”行下面写,我想做几乎相同的功能。
答案 0 :(得分:2)
我没有针对您的C#特定答案,但您可以通过几种不同的方式来解决这个问题。一种是让用户输入他们想要的任何内容,然后对其运行过滤器以去除“坏”html。有许多开源过滤器可以为PHP,Python等执行此操作。一般来说,这是一个非常困难的问题,最好让一些发展良好的第三方代码执行此操作而不是自己编写。
处理它的另一种方法是允许用户以某种更简单的标记语言输入注释,如BBCode,Textile或Markdown(stackoverflow正在使用Markdown),也许与一个不错的Javascript编辑器结合使用。然后,您可以通过处理器为这些标记语言之一运行用户的文本以获取HTML。您通常可以使用您使用的任何语言获得这些处理器的实现。这些处理器通常会删除“坏”HTML。
答案 1 :(得分:1)
由于功能繁多,它在php和python中做的相当“简单”。我还在学习c#.lol。但是还没有碰到这个功能。很有可能它存在,你需要做的就是搜索它。我的意思是一个可以接受用户输入的函数,搜索允许的标签(当然是在一个数组中)并替换&lt;&gt;与[]之类的东西然后使用函数来逃避其他html标签。在php中我们使用htmlentities()。 像
这样的东西<code>
$txt=$_POST['comment'];
$txt=strreplace("<b>*</b>","[b]*[/b],"$txt");
$securetxt=htmlentities($txt);
$finaltxt=strreplace("[b]*[/b]","<b>*</b>","$securetxt");
//现在保存到Db
答案 2 :(得分:0)
我不确定,但我认为你必须在插入数据库时转义html字符,并且当检索回未转义时,浏览器可以像html一样看到它。
答案 3 :(得分:0)
我不知道asp.net,但在php中有一个简单的功能, strip_tags ,可以让你添加异常(在你的情况下, b , em 等)。如果在C#中没有类似的东西,你可以编写一个正则表达式,除去允许的标签之外的所有标签,但很可能这样的表达式已经存在,所以应该很容易找到。
用br替换\ n(或类似的东西)不应该是一个简单的搜索和替换问题。
答案 4 :(得分:0)
这是一条危险的道路。你可能认为你可以做一些很棒的正则表达式,或者找一个可以帮助你的人,但是对一些标记进行清理并留下其他只是疯狂的谈话。
我强烈建议您查看BBCode或其他令牌系统。即使是未使用的东西,例如SO使用的东西,也许是一个更好的解决方案。