使URL W3C有效并在Ajax请求中工作

时间:2009-11-16 22:24:10

标签: javascript ajax url w3c-validation

我有一个返回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,因为此插件模型将被多次重复使用(并且可能被许多人重复使用) )我希望它尽可能简单。

4 个答案:

答案 0 :(得分:3)

在我看来,你遇到的问题是让你的一个应用程序跨越多个层。在这种情况下,它是插件。

RFC 1738指定的网址指出,网址应使用&令牌将键/值对彼此分开。但是&符号是HTML中的保留标记,因此应该转义为&。由于转换&符号是HTML的工件,您的插件可能不应该直接转义它们。相反,你应该有一个函数或某些东西逃脱规范的URL,以便它可以嵌入到HTML标记中。

答案 1 :(得分:1)

这可能实际发生的唯一地方是:如果你是:

  • 使用XHTML
  • 将其作为text / html提供
  • 使用内联<script>

这不是一个快乐的组合,解决方案是in the spec

  

如果您的脚本使用外部脚本   用途&lt;或者&amp;或]]&gt;或 - 。

XHTML媒体类型说明包含相同的建议,但如果您选择忽略它,也会provides a workaround

答案 2 :(得分:0)

当你有表格的标记时:

<a href="?a=1&amp;b=2">

然后href属性的值为?a=1&b=2&amp;只是HTML / XML中的转义序列,不会影响属性的值。这类似于:

<a href="&lt;&gt;">

属性的值为<>

相反,如果你有以下形式的代码:

<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网站中使用这种技术,并多次使用它来解决这个问题。