- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
javascript 的 encodeURI 函数是否有任何有效用途?
据我所知,当您尝试发出 HTTP 请求时,您应该:
在第一种情况下,显然不需要做任何事情来请求它。注意:如果你真的想将它作为参数传递(例如?url=http...),那么你实际上有一个恰好看起来像 URI 的第二种情况的实例。
在第二种情况下,您应该始终将 unicode 字符串转换为 UTF-8,然后在将其添加到 URI 之前调用 encodeURIComponent 转义所有字符。 (如果您有 UTF-8 字节序列而不是 unicode 字符串,则可以跳过转换为 utf8 的步骤)。
假设我没有遗漏任何东西,我看不到 encodeURI 的有效用法。如果你使用它,你很可能已经构建了一个无效的 URI,然后试图在事后“清理”它,这根本不可能,因为你不知道哪些字符是字面上的意思,哪些是打算转义的.
我看到很多反对使用 escape() 的建议,但没有看到任何人劝阻 encodeURI。我是否缺少有效用途?
最佳答案
我有一个 blog post它非常详细地回答了这个问题。
你应该永远不要使用encodeURI
以编程方式构造一个URI,因为你说的原因——你应该总是对个人使用encodeURIComponent
组件,然后将它们组合成一个完整的 URI。
根据 Postel's Law,encodeURI
几乎 有用的地方在于“清理”一个 URI。 (“接受什么要自由,发送什么要保守。”)如果有人给你一个完整的 URI,它可能包含非法字符,例如空格、某些 ASCII 字符(例如双引号)和 Unicode 字符。 encodeURI
可用于将那些非法字符转换为合法的百分号转义序列,无需编码定界符。同样,decodeURI
可用于“美化”URI,将百分比转义序列显示为技术上非法的裸字符。
例如,网址:
http://example.com/admin/login?name=Helen Ødegård&gender=f
是非法的,但它仍然是完全明确的。 encodeURI
将其转换为有效的 URI:
http://example.com/admin/login?name=Helen%20%C3%98deg%C3%A5rd&gender=f
Web 浏览器是可能想要执行此类“URI 清理”的应用程序示例。当您在地址栏中键入 URL 时,它应该尝试将任何非法字符转换为百分号转义符,而不仅仅是出现错误。处理 URI 的软件(例如,想要获取页面超链接中所有 URL 的 HTML 抓取工具)可能也希望应用这种清理,以防任何 URL 在技术上是非法的。
不幸的是,encodeURI
有一个严重的缺陷,即它会转义“%”字符,这使得它对 URI 清理完全无用(它将对任何已经有百分比转义的 URI 进行双重转义) .因此我借了Mozilla's fixedEncodeURI函数并改进它,以便它正确地清理 URI:
function fixedEncodeURI(str) {
return encodeURI(str).replace(/%25/g, '%').replace(/%5B/g, '[').replace(/%5D/g, ']');
}
因此,您应该始终使用 encodeURIComponent
在内部构造 URI。你永远不应该使用 encodeURI
,但你可以使用我的 fixedEncodeURI
来尝试“清理”从外部源(通常作为用户的一部分)提供的 URI界面)。
关于javascript - 应该使用 encodeURI 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9245333/
一、escape escape是对字符串进行编码,使得可以在所有的电脑上可读,但是encodeURI和encodeURIComponent是对URL进行编码的。escape和后两者几乎没关系。 esc
我正在编写一个集成在两个 3rd 方库之间的组件。 从第一个库中获取 URL,并将其传递给第二个库。 我得到的 URL 格式为: https://xxxxx.s3.amazonaws.com/xxxx
我的 cookie 值包含圆括号“例如:demo (1)”当我尝试使用 encodeURI 进行编码时,圆括号 ( 未编码为 %28 ,对圆括号等特殊字符进行编码的替代方法是什么 最佳答案 要将 ur
我使用 encodeURI() 对 php 请求 url 进行编码,它在 Firefox 和 Chrome 中工作得很好,但在 IE/Edge 中却不行。 实际网址是:http://localhost
如果您使用 javascript 的 encodeURI() 方法对某些内容进行编码,您如何在 PHP 中获取解码后的字符串? 我有字符串 name= "salman mahmood",我正在通过 P
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我正尝试在 js 代码下加载背景图片,如下所述: $('.main-banner').css('background-image', "url("+encodeURI(element.image)+"
有没有办法在 Javascript 的 encodeURI() 或 encodeURIComponent() 中指定字符集?例如: encodeURIComponent("例子", "UTF-8")
我创建了一个网络应用程序来清理 CSV/TSV 数据。该应用程序允许我上传 CSV 文件、读取它、修复数据,然后下载包含正确数据的新 CSV 文件。我遇到的一个挑战是下载超过 2500 行的文件。浏览
javascript 的 encodeURI 函数是否有任何有效用途? 据我所知,当您尝试发出 HTTP 请求时,您应该: 一个完整的 URI 您想放入 URI 中的一些片段,可以是 unicode
PHP 中是否有一些 encodeURI() 函数不编码:~!@#$&*()=:/,;?+'? 最佳答案 我现在在用这个 function encodeURI($url) { // http:
编码查询字符串以发送到 Web 服务器时 - 何时使用 escape() 以及何时使用 encodeURI() 或 encodeURIComponent (): 使用转义: escape("% +&=
JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape, decodeURI, de
我正在根据用户查询生成搜索输出并生成这样的搜索结果页面 location.href = root_url + "SearchCenter/Pages/internal.aspx" + "?q=" +
我有一个页面通过 ExtJS 在 iframe 中加载其他页面: alert(UNID); // returns ...AAA== ... autoEl:{ tag:"ifr
我有一个这样的 URI: http://client.dev/dap/module/hdfs-web/api/v1.0/clusters/Cluster%201%20-%20CDH4?operatio
我正在尝试使用 http.get 调用远程 URL。我将搜索字符串附加到基本 URL。此搜索字符串应经过 URL 编码。但是我得到这个错误: Cannot find name 'encodeUri'
在 JavaScript 中,这些有什么区别? 转义()/unescape() encodeuri()/decodeuri() encodeURIComponent()/decodeURICompon
在一个小型 asp.net web 客户端中,我有以下 Ajax 调用。 $.ajax({ type: "GET", url: "Search.aspx?action=GetDocum
什么是 Powershell 中的 Javascripts encodeURI()/encodURIComponent()? 我正在对 URL 进行编码(其中需要一些 %20),但我讨厌手动进行编码。
我是一名优秀的程序员,十分优秀!