如何在保留格式的同时对用户生成的 HTML 块进行子串化?

Posted

技术标签:

【中文标题】如何在保留格式的同时对用户生成的 HTML 块进行子串化?【英文标题】:How to subString a block of user generated HTML while preserving formatting? 【发布时间】:2010-11-13 05:10:07 【问题描述】:

我想创建带有 [阅读更多] 链接的典型预览段落。问题是,我想要 SubString() 的内容包含文本和 html,由用户使用所见即所得编辑器编写。

当然,我会检查以确保字符串不为 null 或空,然后使用 SubString() 它,问题是我最终可能会破坏 html 标签,从而导致整个站点的渲染中断。

WYSIWYG 编辑器似乎无法创建格式完美的 HTML,而且很多时候似乎使用<br /> 标签而不是<p></p> 等...基本上,我不能依赖格式良好的标签等.

我的解决方法是去掉所有 HTML 并为剩余的文本添加子串。这可行,但会丢失 HTML 中的任何格式。

在不破坏网站呈现的情况下,在保持 HTML 的同时对非格式良好的 HTML 块进行 SubString() 处理的最佳方法是什么?

【问题讨论】:

考虑让诸如“

我很显眼

”之类的东西通过?我认为简单就是美丽,您当前完全剥离 html 的方法是合理的。
其实和

都是格式良好的XML和HTML。
tsilb 是正确的。您确定 HTML 格式不正确吗? @tsilb & drs9222 - 好吧,我有办法保证

肯定会跟着

@Andrew Y - 脑子放屁...你的权利,我可以让一些关键标签通过正则表达式。哈哈! derp... ty 【参考方案1】:

如何遍历该子字符串以搜索任何未关闭的标签并将它们保存到列表中,同时删除任何已关闭的标签?然后,您可以为列表中任何打开的标签附加结束标签(以相反的顺序),这将为您提供可用的 html...

【讨论】:

当我看到这个问题时,这是我的第一个想法,但一个天真的实现会打破即使是常见的 HTML 暴行。例如, 充其量只能在偶然情况下起作用。您必须回溯到列表中最后一个匹配的开始标签,一路输出适当的结束标签。通过这个添加,您的方法将生成有效的 HTML,但它可能不是用户期望的 HTML。另一方面,网络浏览器是复杂的野兽,你永远不会复制它们的错误“处理”怪癖。简单是好的,但您可能仍想针对常见的特殊情况编写代码。 如果您使用原始字符串长度,您可能会遇到结束标签可能损坏的问题(开始标签或结束标签,甚至是组合标签)。如果您使用元素内的文本长度(最佳选择)作为起点,您仍然会遇到不知道结果大小的问题。 H1 测试将占用比 P 等更多的空间。问题是如果元素被堆叠并超过首选切点,则不可能将文本放入元素中。这种看似简单的操作很快就会失控...... 更不用说如果用户首先剪切并粘贴 html/文本可能会造成的混乱 :)

以上是关于如何在保留格式的同时对用户生成的 HTML 块进行子串化?的主要内容,如果未能解决你的问题,请参考以下文章

如何同时对 QPushButton 应用悬停和格式化?

Django——forms 组件

在保留基本格式的同时,我可以使用啥来清理收到的 HTML?

如何保留这种 json 格式,同时在序列化之前添加它?

HTML:如何在 textarea 中保留格式?

是否有任何 Java HTML 解析器在其中生成的节点保留原始文本的索引?