如有必要,可以向用户提供的缩写文本添加结束标记?

时间:2017-05-07 19:44:09

标签: javascript jquery html tags bbcode

我对jQuery非常陌生。

我从数据库中获取用户提供的输入并在屏幕上显示。我做的第一件事就是擦掉可能造成伤害的角色:

function escapeHtml(text) {
    return text
        .replace(/&/g, "&")
        .replace(/</g, "&lt;")
        .replace(/>/g, "&gt;")
        .replace(/"/g, "&quot;")
        .replace(/'/g, "&#039;");
}

接下来,允许他们使用一些表情符号(感谢我在某处找到的精彩的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的新手)...

0 个答案:

没有答案