Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何将换行符转换为$.text(),或者如何使$.append()从HTML中安全?_Jquery_Html_Escaping - Fatal编程技术网

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, '&amp;').replace(/</g, '&lt;').replace(/"/g, '&quot;');
}

$('#something').append(encodeHTML(userinput).replace(/\n/g, '<br>'));


如果您想插入html标记,您应该使用
$.html()
,而不是
$.text()

,如果您想让他们能够以文本形式聊天html:

您可以先将替换为,然后将新行替换为BR标记,从而转义HTML元素。

您可以使用
HTML()

,只要转义HTML中可能特殊的其他字符即可。例如

函数对HTML进行编码{

返回s.replace(/&/g,“&;”)。替换(/我将尝试这两种方法,但同时,如果我想使用第一种方法,并且还想维护
标记…我必须使用一个大的正则表达式,不是吗?@Andrew:有趣的是,你应该问bobince关于正则表达式和HTML的问题。只是提醒一下-
不能保持。:PMere narchy是世界上的厕所。嘿。如果你你有
标签(你想成为真正的标签)事实上,这并不重要。输入问题对于标签来说并不重要,因为这不像是一个人在发布自己的链接。在这种情况下,服务器可以处理标签的替换。您可以使用CSS:
pre{font family:Sans Serif;}轻松覆盖浏览器的默认
样式
将所有
更改为使用无衬线。我很想在这两个空格上打勾:
答案,但鉴于
是我采用的解决方案,我不得不将这一个标记为我的答案。