Jquery 如何将换行符转换为$.text(),或者如何使$.append()从HTML中安全?
我有一个聊天窗口(使用Jquery 如何将换行符转换为$.text(),或者如何使$.append()从HTML中安全?,jquery,html,escaping,Jquery,Html,Escaping,我有一个聊天窗口(使用),有时需要获取多行条目。到目前为止,我只是将传入的\n替换为,并使用.append()显示文本。不幸的是,我发现根据用户输入留下一个裸体的.append(),允许用户插入任意HTML,然后由浏览器执行。在将随机StackOverflow页面复制到该页面(用于测试大型发送)时发现了此问题,其中有一个标记,该标记立即导致浏览器尝试下载CSS文件 将此方法更改为使用.text()解决了该特定问题,但现在我无法显示换行符以文本形式出现,而不是HTML,而且\n似乎没有任何效果 有
),有时需要获取多行条目。到目前为止,我只是将传入的\n
替换为
,并使用.append()
显示文本。不幸的是,我发现根据用户输入留下一个裸体的.append()
,允许用户插入任意HTML,然后由浏览器执行。在将随机StackOverflow页面复制到该页面(用于测试大型发送)时发现了此问题,其中有一个
标记,该标记立即导致浏览器尝试下载CSS文件
将此方法更改为使用.text()
解决了该特定问题,但现在我无法显示换行符<代码>以文本形式出现,而不是HTML,而且
\n
似乎没有任何效果
有什么建议吗?我是否应该使用.append()
,但找到某种方法来转义除
之外的所有HTML标记?或者有没有办法将换行插入.text()
?还是我完全没有第三个选项?使用
元素以纯文本形式保留换行符(以及其他内容)
function encodeHTML(s) {
return s.replace(/&/g, '&').replace(/</g, '<').replace(/"/g, '"');
}
$('#something').append(encodeHTML(userinput).replace(/\n/g, '<br>'));
如果您想插入html标记,您应该使用
$.html()
,而不是$.text()
,如果您想让他们能够以文本形式聊天html:
您可以先将HTML()
和
,只要转义HTML中可能特殊的其他字符即可。例如
函数对HTML进行编码{
返回s.replace(/&/g,“&;”)。替换(/我将尝试这两种方法,但同时,如果我想使用第一种方法,并且还想维护
标记…我必须使用一个大的正则表达式,不是吗?@Andrew:有趣的是,你应该问bobince关于正则表达式和HTML的问题。只是提醒一下-
不能保持。:PMere narchy是世界上的厕所。嘿。如果你你有
标签(你想成为真正的标签)事实上,这并不重要。输入问题对于标签来说并不重要,因为这不像是一个人在发布自己的链接。在这种情况下,服务器可以处理标签的替换。您可以使用CSS:pre{font family:Sans Serif;}轻松覆盖浏览器的默认
样式
将所有
更改为使用无衬线。我很想在这两个空格上打勾:
答案,但鉴于
是我采用的解决方案,我不得不将这一个标记为我的答案。