我对jQuery非常陌生。
我从数据库中获取用户提供的输入并在屏幕上显示。我做的第一件事就是擦掉可能造成伤害的角色:
function escapeHtml(text) {
return text
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
接下来,允许他们使用一些表情符号(感谢我在某处找到的精彩的Twemoji CSS):
function emote(text) {
return text
.replace(':)', '<i class="twa twa-smiley"></i>')
.replace(';)', '<i class="twa twa-wink"></i>')
.replace(':(', '<i class="twa twa-frowning"></i>');
到目前为止一切都很好。
最后一个被证明是一种令人头疼的问题 - 允许一点点标记:
function formatHtml(text) {
return text
.replace("[b]", "<strong>")
.replace("[/b]", "</strong>")
.replace("[i]", "<em>")
.replace("[/i]", "</em>");
}
如果有人忘记了结束标记,它显然会溢出到文档的其他区域。不确定最佳解决方案是什么。每次打开标签时是否应该标记,如果在输入结束时没有关闭标记,请通过脚本插入一个标记?所以它不再是一个简单的替换,而是一个find开始标记,替换它,然后查找结束标记并替换它,如果它存在,否则在输入的末尾插入一个。
任何想法都将不胜感激。还有关于escapeHTMML()的建议 - 如果从较旧的SO帖子中解除,我看起来很棒,但不确定是否有任何担心它被规避(再次,我是jQuery的新手)...