Javascript 如何在querystring中嵌入带撇号的值
我有以下javascript:Javascript 如何在querystring中嵌入带撇号的值,javascript,Javascript,我有以下javascript: tr.append("<a href='add_widget.html?id=" + data[i].id + "&pg=" + data[i].page_number + "&dest=" + data[i].dest + "&name=" + data[i].name.replace("'","\\'") + "'</a><button class='btn btn-xs btn-primary'>Edit
tr.append("<a href='add_widget.html?id=" + data[i].id + "&pg=" + data[i].page_number + "&dest=" + data[i].dest + "&name=" + data[i].name.replace("'","\\'") + "'</a><button class='btn btn-xs btn-primary'>Edit</button> </td>");
如何更改上述代码,以便将整个字符串“John’s stuff”传递到add_widget.html页面
谢谢 替换(“”,“%27”)
试试这是一个在线URL编码器/解码器。当你试图“保护”字符时,你必须记住你要保护他们不受什么影响。在这种情况下,您需要担心两个口译员:
- 您正在构建HTML,因此您必须担心HTML解析器李>
- 您正在构建一个URL,因此您必须担心浏览器和服务器将如何解析URL
';
)替换引号。要处理第二个问题,可以使用encodeURIComponent()
我认为您应该首先执行encodeURIComponent()
调用,以避免HTML实体符号混乱。HTML解析器处理完字符串后,实体表示法将消失:
function qEncode(str) {
return encodeURIComponent(str).replace(/'/g, "'");
}
要使用它:
tr.append("<a href='add_widget.html?id=" +
qEncode(data[i].id) + "&pg=" +
qEncode(data[i].page_number) + "&dest=" +
qEncode(data[i].dest) + "&name=" +
qEncode(data[i].name) +
"'</a><button class='btn btn-xs btn-primary'>Edit</button> </td>"
);
tr.append(使用escape(data[i].name)
而不是data[i].name.replace(“'”,“\\'”)
,将解决您的问题。您需要思考,我的代码将被解释为什么,那么我需要进行escape做什么
您的代码将由浏览器中的HTML解释器进行解释
您的代码将被解释为URI
这意味着您需要以相反的顺序对它们进行转义/编码。幸运的是,JavaScript提供了一个URI编码器作为encodeURIComponent
,但它没有提供HTML编码器(可能是因为我们有DOM方法),但对于重要的字符(例如
function html_encode(str) {
var re_chars = /[<>'"]/g;
function replacer($0) {
return '&#' + $0.charCodeAt(0) + ';'
}
return str.replace(re_chars, replacer);
}
// example follows
html_encode('<foo bar="baz">'); // "<foo bar="baz">"
为了完整起见
function html_decode(str) {
var re = /&(?:#\d{1,3}|amp|quot|lt|gt|nbsp);/g, // notice extra entities
d = document.createElement('div');
function replacer($0) {
d.innerHTML = $0;
return d.textContent;
}
return str.replace(re, replacer);
}
// and an example
html_decode('<foo bar="baz">'); // "<foo bar="baz">"
函数html\u解码(str){
var re=/&(?:#\d{1,3}amp | quot | lt | gt | nbsp);/g,注意额外的实体
d=document.createElement('div');
函数替换器($0){
d、 innerHTML=$0;
返回d.textContent;
}
返回str.replace(re,replacer);
}
//举个例子
html#U解码('<;foo bar=";baz";>;')/“
您应该使用encodeURIComponent()
对参数值进行编码。编辑(但我猜这对引号没有帮助)您使用的是jQuery吗?如果是这样,有一种更好的方法来执行您正在执行的操作。内置(通常不推荐)的escape()
函数将执行此操作。使用javascript encodeURI或encodeURI组件是消除不需要的URL字符的最佳方法。可能最好使用全局替换:replace(/”/g,“%27”)
@Jean Philipper是,但请尝试它-encodeURI()
和encodeURIComponent()
不会将单引号字符替换为%27
@formix它取决于URL如何到达“href”DOM节点的属性。在OP中,它是通过HTML标记到达的,因此HTML解析器将在解析
标记时解释实体符号。在“href”的值中不会有HTML实体符号属性。URI编码%xx
是否不同于HTML编码x;
?,即HTML解释器不会忽略%xx
?edit没有完整读取OP的代码,它位于URI中,因此可以对其进行编码both@PaulS.右-OP出现问题的原因是URL不正确ng构建为嵌入HTML标记的属性值。HTML解析器是导致问题的原因,因为它将单引号字符视为终止属性值。抱歉@Pointy能否稍微修改您的答案,以便为我提供需要进行的两个函数调用的完整示例?只想确定我在同一页上,如果您想了解html\u decode
,我会将它们逐个匹配地放入
中,而不是一次全部匹配,以避免意外加载或代码执行(例如
)
attrib_value = html_encode(/* ... + */ encodeURIComponent(data[i].name) /* + ... */ );
function html_decode(str) {
var re = /&(?:#\d{1,3}|amp|quot|lt|gt|nbsp);/g, // notice extra entities
d = document.createElement('div');
function replacer($0) {
d.innerHTML = $0;
return d.textContent;
}
return str.replace(re, replacer);
}
// and an example
html_decode('<foo bar="baz">'); // "<foo bar="baz">"