属性值是在集合上编码的URI

时间:2010-09-10 20:09:12

标签: javascript

我想使用attribute设置element["attribute"] DOM元素,但值为URI encoded。例如,如果值为q=test&r=123&s=456,并且在将其附加到DOM后,该值将变为q=test&r=123&s=456

现在,使用Firebug查看脚本标记的 RENDERED源复制HTML ...

请将以下代码粘贴到新的HTML文件中,以便进行有价值的调查。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <a href="javascript: injectTag();">Inject Tag</a>
    <div id="status"></div>
    <script>
        var injectTag = function () {
            var scriptTag = document.createElement("script");
            scriptTag["src"] = "http://www.google.com/search?q=US+Geological+Survey&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a";
            scriptTag["type"] = "text/javascript";

            var head = document.getElementsByTagName("head")[0];
            head.appendChild(scriptTag);
            document.getElementById("status").innerHTML = "Now, view <b>RENDERED source</b>, or <b>Copy HTML</b> of the script tag using Firebug...";
        }
    </script>
</body>
</html>

感谢和问候,
穆奈姆

1 个答案:

答案 0 :(得分:1)

你所看到的正是应该发生的事情。

但该值不是URI编码的。它是HTML转义的。

HTML网页中的所有数据(数据:属性值和文字)都必须进行HTML转义(&在源代码中变为&amp;<变为&lt; }, 等等)。如果你忘记这样做,大多数浏览器都是宽容的,但它仍然是错误的。

如果您动态添加数据,那么DOM就会遵循该规则并为您转义HTML数据。