假设我从服务请求中获得了一些JSON,如下所示:
{
"message": "We're unable to complete your request at this time."
}
Run Code Online (Sandbox Code Playgroud)
我不确定为什么那个抄袭被编码为那个('
); 我所知道的是我想解码它.
这是一种使用jQuery的方法,它突然出现在我脑海中:
function decodeHtml(html) {
return $('<div>').html(html).text();
}
Run Code Online (Sandbox Code Playgroud)
但这似乎(非常)hacky.什么是更好的方式?有"正确"的方式吗?
显然,这比我想象的要难得多.它甚至如此简单......
是否有一个功能相当于PHP的内置于Javascript的htmlspecialchars?我知道自己实现起来相当容易,但使用内置函数(如果可用)更好.
对于那些不熟悉PHP,用htmlspecialchars转换这样的东西<htmltag/>
进入<htmltag/>
我知道,escape()
并且encodeURI()
不以这种方式工作.
我有一些与XML-RPC后端通信的Javascript代码.XML-RPC返回表单的字符串:
<img src='myimage.jpg'>
Run Code Online (Sandbox Code Playgroud)
但是,当我使用Javascript将字符串插入HTML时,它们会逐字呈现.我没有看到图像,我真的看到了字符串:
<img src='myimage.jpg'>
Run Code Online (Sandbox Code Playgroud)
我的猜测是HTML正在通过XML-RPC通道进行转义.
我怎样才能在Javascript中取消字符串?我尝试了这个页面上的技术,但未成功:http://paulschreiber.com/blog/2008/09/20/javascript-how-to-unescape-html-entities/
诊断问题的其他方法有哪些?
如何使用Font Awesome中包含的搜索图标进行输入?我的网站上有一个搜索功能(基于PHPmotion),我想用于搜索.
这是代码:
<div id="search-bar">
<form method="get" action="search.php" autocomplete="off" name="form_search">
<input type="hidden" name="type" value="videos" />
<input autocomplete="on" id="keyword" name="keyword" value="Search Videos" onclick="clickclear(this,
'Search Videos')" onblur="clickrecall(this,'Search Videos')" style="font-family: verdana; font-weight:bold;
font-size: 10pt; height: 28px; width:186px; color: #000000; padding-left: 2px; float:left; border: 1px solid black; background-color:
#ffffff" />
<input type="image" src="http://viddir.com/themes/default/images/search.jpg" height="30" width="30" border="0" style="float:right;"/>
<div id="searchBoxSuggestions"></div>
</form>
</div>
Run Code Online (Sandbox Code Playgroud) 我在我正在构建的应用程序上使用Handlebars模板引擎来呈现从服务器获取的数据.
我知道它默认转义HTML值,你必须使用三个括号{{{text}}}
才能text: <p>Example</p>
呈现为HTML元素.
问题是,如果我收到的数据(包括HTML标签)已经被转义,我该怎么办?
所以,如果我收到如下数据:
text: <p>Example</p>
Run Code Online (Sandbox Code Playgroud)
如何强制把手翻译并将其渲染为普通HTML?
是否有使用JavaScript或ES6 编码或解码HTML实体的本机方法?例如,<
将被编码为<
.有像html-entities
Node.js这样的库,但感觉应该有一些内置于JavaScript中的东西已经处理了这个常见的需求.
我在一个项目中使用i18next并且无法绕过在翻译文件中包含 html 标签并正确呈现它们。
我的.json
翻译文件的一个例子:
"en": {
"product": {
"header": "Welcome, <strong>User!</strong>"
}
}
Run Code Online (Sandbox Code Playgroud)
这个问题有一个很好的答案,但与 JQuery 相关。我没有使用 JQuery,我的项目是 React,这是我的设置:
import i18next from 'i18next';
import en from 'locales/en';
i18next.
init({
lng: 'en',
fallbackLng: false,
resources: en,
debug: false,
interpolation: {
escapeValue: false
}
});
export default i18next.t.bind(i18next);
Run Code Online (Sandbox Code Playgroud)
在组件中,我有:
import t from 'i18n';
t('product.header')
Run Code Online (Sandbox Code Playgroud)
我想要的 HTML:
Welcome, <strong>User!</strong>
Run Code Online (Sandbox Code Playgroud)
Html 我得到:
Welcome, <strong>User!</strong>
Run Code Online (Sandbox Code Playgroud)
谢谢
在HTML5/JS应用程序中,我们有一些视图,其中包含一些样式,具体取决于data-attribute
元素:
喜欢
<li data-level="0"></li>
Run Code Online (Sandbox Code Playgroud)
要么
<li data-level="1"></li>
Run Code Online (Sandbox Code Playgroud)
CSS
li[data-level^="1"] {
/* some styles */
}
Run Code Online (Sandbox Code Playgroud)
这似乎无处不在page reload
.
但是当通过JS以编程方式设置data-attribute时,CSS属性将在所有相关的桌面浏览器中呈现,但不会在移动Safari中呈现.
JS部分看起来像这样:
this.$el.attr('data-level', this.model.getLevel())
Run Code Online (Sandbox Code Playgroud)
关于如何强制应用这些属性的任何想法(刷新/重绘某些东西)?
我想避免使用class属性和不同的类,因为事情比这里显示的更复杂......
跟进我的上一个问题 ......
如果攻击者有权访问以下内容,则可以利用此代码encodedText
:
return $('<div/>').html(encodedText).text();
Run Code Online (Sandbox Code Playgroud)
例如$("<div/>").html('<img src="X" onerror="alert(\'hi\');" />').text()
显示警报.
此答案建议使用a textarea
来避免XSS漏洞:
return $('<textarea/>').html(encodedText).text();
Run Code Online (Sandbox Code Playgroud)
这能够安全地处理以前的漏洞利用.
但是,此答案表明使用时仍存在XSS漏洞textarea
:
我建议使用更安全,更优化的功能
不要使用jQuery.html().text()解码html实体,因为它不安全,因为用户输入永远不能访问DOM
我的问题是:$('<textarea/>').html(encodedText);
假设攻击者可以访问,是否有任何浏览器可以利用来运行XSS encodedText
?