本周工作思考
- 文章中文字出现重叠问题修复的思考
- 文章小节的展示经常性的出现一些异常情况,比如图片找不到,图片尺寸过大,文本字体颜色不对,样式不对等等问题;
- 文章小节的实现方案是这样的:文章小节的内容输入框是富文本编辑器,展示部分首先做安全处理,然后以HTML的方式展示出来; 用户一般有两种输入方式,1 直接手工输入内容,2 从别处复制过来粘贴都这里;
- 基于这样的实现方案,很容易出现上述举例所说的问题,如果文本和格式是从别处复制过来的,特别是内联样式, 很容易出现这类问题;这类问题不能完美的从技术侧解决,因为诊断和纠正用户的文本格式非常困难,样式带有较大的主观性和随意性,1是不知道用户是无意设置成这种样式,还是有意设置成这种样式,2是假定知道用户设置可不合适的样式,也很难把样式纠正成用户满意的样式
- 针对这种情况如果改善呢?结合目前的经验,目前有3类方案:
- 1 是针对问题具体解决,比如图片加载不到,图片尺寸过大的问题,这个问题是有解决过的,基本思路是通过正则找到img标签,解析出宽度和高度,判断宽度和高度是否超出我们预设的最大值,如果超出了取最大值,以此来纠正图片过大的问题;
- 2 是基于html合法性和业务规则的校验,目前文本重叠的问题就是基于这种思路修复的,这个思路是受html validator启发而来,主要框架是把用户的输入转换成dom,通过遍历dom节点,使每个节点都接受一些规则插件的访问(vistor),规则插件可以是业务规则可以是html的w3c规则,比如转化dom失败,可以针对转化dom失败的原因,转成合法的html,比如图片节点的大小必须控制在一定的范围,比如a标签不能带有某些特定url的链接奠定。结合该解决框架,文本重叠是因为line-height不合法的,可以编写lineHeight插件,保证line-height必须大于1;
- 3 是基于拼写检查的思路,结合上述的html validator实现,Web侧编辑时,框架实时检测用户输入的html,对于认为不合理的地方,在输入框出给出下划线或者tooltips提示,让用户根据提示修改;
- 以上3类方案各有优缺点,方案1简单直接,缺点是不成体系,代码分散,问题解决不彻底,时间长了代码很难管理,方案2代码收敛,思路单一清晰,缺点是可能会有性能问题,方案3相对是比较完善的方案,缺单是改动较大,现有富文本编辑器实现实时拼写检查存在技术挑战和性能挑战。