问题标签 [percent-encoding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 在 Java 中规范化可能编码的 URI 字符串
使用 Java,我想剥离片段标识符并对一组不同的 URI 进行一些简单的规范化(例如,小写方案、主机)。输入和输出 URI 在一般 HTTP 意义上应该是等效的。
通常,这应该是直截了当的。但是,对于像 URI 这样http://blah.org/A_%28Secret%29.xml#blah
的百分比编码的 URI (Secret)
, 的行为java.util.URI
让生活变得困难。
归一化方法应该http://blah.org/A_%28Secret%29.xml
从 URI中返回,http://blah.org/A_%28Secret%29.xml
并且http://blah.org/A_(Secret).xml
在解释中不等效 [§2.2; RFC3968 ]
所以我们有以下两种归一化方法:
正如我们所见,URI 在没有片段标识符的情况下被解析和重建。
但是,对于方法 1,u.getPath()
返回一个未编码的 URI,它会更改最终的 URI。
对于方法 2,u.getRawPath()
返回原始路径,但是当传递给URI
构造函数时,Java 决定添加双重编码。
这感觉就像一个中国手指陷阱。
所以两个主要问题:
- 为什么
java.util.URI
觉得需要玩编码? - 如何在不摆弄原始百分比编码的情况下实现这种规范化方法?
(我宁愿不必实现java.util.URI
非平凡的解析/连接方法。)
编辑:这是来自URI
javadoc的更多信息。
单参数构造函数要求在其参数中引用任何非法字符,并保留任何转义的八位位组和其他存在的字符。
多参数构造函数根据它们出现的组件的要求引用非法字符。这些构造函数始终引用百分比字符 ('%')。保留任何其他字符。
getRawUserInfo、getRawPath、getRawQuery、getRawFragment、getRawAuthority 和 getRawSchemeSpecificPart 方法以原始形式返回其对应组件的值,而不解释任何转义的八位字节。这些方法返回的字符串可能同时包含转义的八位字节和其他字符,并且不会包含任何非法字符。
getUserInfo、getPath、getQuery、getFragment、getAuthority 和 getSchemeSpecificPart 方法解码其相应组件中的任何转义八位字节。这些方法返回的字符串可能同时包含其他字符和非法字符,并且不会包含任何转义的八位位组。
toString 方法返回一个包含所有必要引号但可能包含其他字符的 URI 字符串。
toASCIIString 方法返回不包含任何其他字符的完全引用和编码的 URI 字符串。
因此,如果类内部没有弄乱 URL 编码,我就不能使用多参数构造函数URI
。呸!
encoding - NSString 类别以获得更好的百分比转义
我为我的一个项目写了一个小 NSString 类别,更好地实现了百分比转义:@im
在这个项目中,它工作得很好,我喜欢使用它。但是当我将它移植到另一个项目时,该代码通过 EXC_BAD_ACCESS。我可以在该代码中做得更好吗?
url - 为什么维基百科在其 URL 片段中使用修改后的百分比编码?
我注意到维基百科对 URL 的路径部分使用百分比编码,但将%
字符转换.
为#fragment。
例如,在俄语“俄罗斯”页面上,第 2 部分 (История)的 URL是
http://ru.wikipedia.org/wiki/%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F#.D0.98.D1.81.D1.82.D0.BE.D1.80.D0.B8.D1.8F
代替
http://ru.wikipedia.org/wiki/%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F#%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F
id/name 的 HTML<5 标记都不是有效的标记,因为标记必须以 [A-Za-z] 开头。HTML5目前声明您可以使用除空格之外的任何字符中的至少一个(因此您根本不需要编码),但 Wikipedia 不是 HTML5。
那么,为什么维基百科要使用这个方案呢?
c# - OAUTH 参数编码
在实施 OAUTH 时,我遇到了以下问题。在创建签名库时,应该再次编码编码参数还是应该在规范化参数时将编码参数排除在编码之外?
jmeter - 尝试解码参数值 JMeter 中的 % 字符失败并出现 IllegalArgumentException: URLDecoder: Illegal hex characters in escape(%) 模式
使用 Apache JMeter 2.7,我的 POST 请求的消息正文 (JSON) 包含一个密码字段,格式为asdf%xy3dsfsfsf
. JMeter 试图解释%xy
为百分比编码字符并抛出此异常。
未捕获的异常 java.lang.IllegalArgumentException:URLDecoder:转义(%)模式中的非法十六进制字符 - 对于输入字符串:“xy”。有关详细信息,请参阅日志文件。
我无法使用反斜杠转义该字符,asdf\%xy3dsfsfsf
因为它会作为错误密码进入 Web 服务。
请就如何解决此问题提出建议。
更新:该问题在构建 2578 中得到解决。 https://builds.apache.org/job/JMeter-trunk/2578/
php - 为什么 ë 百分比编码为 %EB 也编码为 %C3%AB?
当我在 Web 应用程序的表单中输入 ë 时,这是由 Google Chrome 编码为 %C3%AB 的百分比。
当我使用 PHP 的 urlencode('ë'); 这被编码为 %EB。
为什么编码不同?
如何使用与使用 PHP 4 的 Google Chrome 相同的编码进行编码?
html - 如何使用 XSLT 将 HTML 百分比编码转换为 Unicode?
网上有大量关于此的条目和答案,但它们都与我需要的方向相反。从我的 iTunes XML 中,我尝试使用 XSLT 样式表将数千个百分比编码的条目以多种语言转换为 Unicode 文本。除了跟踪每个字符并进行替换之外,我还缺少任何功能或过程吗?这是我正在使用的各种示例的一个小示例,第一行是 XML 字符串值,下一行是我尝试生成并输出到文本文件的基本文本。
/iTunes/iTunes 音乐/Droit devant/L'odyssée.mp3
À la Pêche
Запоминай
Κότσ̌αρι
对于某些人来说,最后一个可能无法正确显示,因为 hacek/caron 过于引人注目。
提前感谢您的任何建议或线索
django - 在 Django 中捕获错误的 % 编码 URL 以返回自定义“错误 400”页面
有时,其他网站使用错误的百分比编码 URL 链接到我们的 Django 支持的网站。Disqus.com 和 Twitter.com 确实有同样的问题,所以我们的用例没有什么特别之处:http: //disqus.com/%C3A4。在此 URL 中,缺少第二个 %。有效的 URL 如下所示:http ://disqus.com/%C3%A4
Django 返回一个空的错误 400(错误请求)页面。但是,我们想捕捉错误,而不是返回一个普通的非信息页面,我们希望至少向我们的用户展示我们的自定义 404 页面。甚至更好的是,我们想检查输入 URL 是否缺少 %-characters 或任何类似的东西来验证其格式。MiddleWare/process_request 即使出现 400 错误也会被调用,所以我们确实有一个钩子来捕获错误。
我们想在我们的网站上解决这个问题。有没有最佳实践...?一个 handler400 会很棒 - 是否可以自己创建一个?