我有一个返回URL的泛型函数。 (这是一个插件函数,可以将URL返回到插件中的资源[images,stylesheets])。
我在这些网址中使用GET参数。
如果我想在HTML页面中使用这些URL,要通过W3C验证,我需要将&符号屏蔽为& amp;
/plugin.php?plugin=xyz&resource=stylesheet&....
但是,如果我想将URL用作AJAX调用的“url”参数,则不能正确解释&符号,搞砸了我的调用。
我能做些什么吗?& amp; amp;在AJAX电话中工作?
我非常希望避免将参数添加到URL生成函数(intentionUse =“ajax”或其他)或在Javascript中操作URL,因为此插件模型将被多次重复使用(并且可能被许多人重复使用) )我希望它尽可能简单。
答案 0 :(得分:3)
在我看来,你遇到的问题是让你的一个应用程序跨越多个层。在这种情况下,它是插件。
RFC 1738指定的网址指出,网址应使用&
令牌将键/值对彼此分开。但是&符号是HTML中的保留标记,因此应该转义为&
。由于转换&符号是HTML的工件,您的插件可能不应该直接转义它们。相反,你应该有一个函数或某些东西逃脱规范的URL,以便它可以嵌入到HTML标记中。
答案 1 :(得分:1)
这可能实际发生的唯一地方是:如果你是:
<script>
这不是一个快乐的组合,解决方案是in the spec。
如果您的脚本使用外部脚本 用途&lt;或者&amp;或]]&gt;或 - 。
XHTML媒体类型说明包含相同的建议,但如果您选择忽略它,也会provides a workaround。
答案 2 :(得分:0)
当你有表格的标记时:
<a href="?a=1&b=2">
然后href
属性的值为?a=1&b=2
。 &
只是HTML / XML中的转义序列,不会影响属性的值。这类似于:
<a href="<>">
属性的值为<>
。
相反,如果你有以下形式的代码:
<script>
var s = "?a=1&b=2";
</script>
然后你可以使用JavaScript函数:
<script>
var amp = String.fromCharCode(38);
var s = "?a=1"+amp+"b=2";
</script>
这允许代码只有有效的HTML或只有有效的XHTML在两者中都有效。 (有关更多信息,请参阅Dorwald的评论。)
答案 3 :(得分:0)
尝试返回JSON而不仅仅是一个字符串,这样你的Javascript就可以将URL值作为对象读取,而你不应该有这个问题。除此之外,尝试使用以下内容对字符串进行HTML解码:
function escapeHTML (str)
{
var div = document.createElement('div');
var text = document.createTextNode(str);
div.appendChild(text);
return div.innerHTML;
};
显然,您需要确保删除对可能创建的DOM元素的任何引用(我在此处没有简化该示例)。
我在我工作中创建的AJAX网站中使用这种技术,并多次使用它来解决这个问题。