2

我有一个返回 URL 的通用函数。(它是一个插件函数,可将 URL 返回到插件中的资源 [图像、样式表])。

我在这些 URL 中使用 GET 参数。

如果我想在 HTML 页面中使用这些 URL,以通过 W3C 验证,我需要将与号屏蔽为 &

/plugin.php?plugin=xyz&resource=stylesheet&....

但是,如果我想将 URL 用作 AJAX 调用的“url”参数,则与号的解释不正确,从而搞砸了我的调用。

我可以做点什么吗?在 AJAX 调用中工作?

我非常希望避免向 URL 生成函数(intendedUse="ajax" 或其他)添加参数或在 Javascript 中操作 URL,因为这个插件模型将被重复使用多次(并且可能被很多人)希望它尽可能简单。

4

4 回答 4

3

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

RFC 1738指定的URL 声明 URL 应使用&令牌将键/值对彼此分开。然而 & 是 HTML 中的保留标记,因此应该转义为&. 由于转义 & 符号是 HTML 的产物,因此您的插件可能不应该直接转义它们。相反,您应该有一个函数或一些东西来转义一个规范的 URL,以便它可以嵌入到 HTML 标记中。

于 2009-11-16T22:48:48.453 回答
1

唯一可能实际发生这种情况的地方是,如果您是:

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

这不是一个愉快的组合,解决方案在规范中

如果您的脚本使用 < 或 & 或 ]]> 或 --,请使用外部脚本。

XHTML 媒体类型说明包含相同的建议,但如果您选择忽略它,也提供了一种解决方法。

于 2009-11-16T22:28:28.630 回答
0

当您有表单的标记时:

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

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

<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 的评论。)

于 2009-11-16T22:29:35.663 回答
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 站点中使用了这种技术,并且已经多次使用它来解决这个问题。

于 2009-11-16T22:34:48.883 回答