这是几个星期前我问过的一个问题的后续行动。
以下内容:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Test</title>
</head>
<body>
<a onclick="start_ajax_request('url.php&key1=val1&key2=val2&key3=val3')">Test</a>
</body>
</html>
将不在W3C验证器中验证为HTML 4.01过渡,错误地,据我所见。它抱怨实体,并希望每个&符转换为&
。但是,在给定的上下文中&
会出错,因为我的Ajax请求需要简单的&符号,并且在被&
时会中断。
在这个示例中,有没有办法屏蔽/转义&符号,这样它仍然是一个有效的URL,它将通过Ajax请求,并关闭验证器?
答案 0 :(得分:2)
或者,您可以在JavaScript中分配onclick。这样更好,因为它可以使您的标记更清晰。这是一个jquery解决方案。
$('a').bind('click', function() {
start_ajax_request('url.php?key1=val1&key2=val2&key3=val3');
});
答案 1 :(得分:1)
尝试使用JS escape()函数并将&符号作为%26传递。同样的方式我确定你看到空格传递为%20
希望它有效
答案 2 :(得分:1)
您应该使用encodeURIComponent() function发送URL字符串,然后在接收方中对其进行解码。如果您使用的是PHP,则需要执行以下操作:
utf8_decode(rawurldecode(str));
答案 3 :(得分:0)
我不是专家,我不知道我的答案是否与您的问题完全相关。
我遇到了类似的问题,但在相反的方向上,我注意到当我创建一个onclick事件,其中参数通过json格式的ajax接收,解析并放置在文档中,当我查看源代码时,我得到了一些东西像
<a href="#" onclick="qString('blah.php', 'ipp=2&ord=0');">blah</a>
但是这并没有阻止应用程序工作,我以前从来没有遇到过问题,因为我不使用&amp;作为参数值的一部分,如果值是用户输入,我使用encodeURIComponent对值进行编码。
所以我继续并且放弃了任何json解析问题或ut8相关问题,当我意识到在html中使用javascript时&amp;放大器;而不是&amp;实际上是正确的。
所以在我的情况下,我想了一会儿不行,W3C valitador还可以。
尝试:
<html>
<head>
<title>Test</title>
<script language="javascript">
function foo(url) {
alert(url.indexOf('&'));
alert(url.indexOf('&'));
return false;
}
</script>
</head>
<body>
<a href="#" onclick="foo('url.php?key1=val1&key2=val2&key3=val3');">Test</a>
</body>
</html>