问题标签 [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.

0 投票
2 回答
3590 浏览

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非平凡的解析/连接方法。)


编辑:这是来自URIjavadoc的更多信息。

  • 单参数构造函数要求在其参数中引用任何非法字符,并保留任何转义的八位位组和其他存在的字符。

  • 多参数构造函数根据它们出现的组件的要求引用非法字符。这些构造函数始终引用百分比字符 ('%')。保留任何其他字符。

  • getRawUserInfo、getRawPath、getRawQuery、getRawFragment、getRawAuthority 和 getRawSchemeSpecificPart 方法以原始形式返回其对应组件的值,而不解释任何转义的八位字节。这些方法返回的字符串可能同时包含转义的八位字节和其他字符,并且不会包含任何非法字符。

  • getUserInfo、getPath、getQuery、getFragment、getAuthority 和 getSchemeSpecificPart 方法解码其相应组件中的任何转义八位字节。这些方法返回的字符串可能同时包含其他字符和非法字符,并且不会包含任何转义的八位位组。

  • toString 方法返回一个包含所有必要引号但可能包含其他字符的 URI 字符串。

  • toASCIIString 方法返回不包含任何其他字符的完全引用和编码的 URI 字符串。

因此,如果类内部没有弄乱 URL 编码,我就不能使用多参数构造函数URI。呸!

0 投票
2 回答
878 浏览

encoding - NSString 类别以获得更好的百分比转义

我为我的一个项目写了一个小 NSString 类别,更好地实现了百分比转义:@im

在这个项目中,它工作得很好,我喜欢使用它。但是当我将它移植到另一个项目时,该代码通过 EXC_BAD_ACCESS。我可以在该代码中做得更好吗?

0 投票
1 回答
878 浏览

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。

那么,为什么维基百科要使用这个方案呢?

0 投票
2 回答
638 浏览

css - 将css修改为百分比而不是像素

我最近创建了这个 WordPress网站,并使用像素和边距来创建两个半透明内容框的布局。但是,我确信那些比我更有经验的人都知道这根本不是响应式的,也不是非常友好的跨浏览器!所以有人建议我换成百分比而不是像素,但我不知道从哪里开始我现有的 CSS!

我需要制作一个 5 列的布局来实现这一点吗?

  • 第一列空白以创建左侧空白
  • 第二列包含较大的蓝色内容框
  • 第三列空白以在两列之间创建空间
  • 第四列较小的蓝色内容框
  • 第五列创建最右边的空白区域

有没有更简单的方法?

这是我现有样式表的链接

任何帮助将不胜感激,或者如果我忘记传递一些必需的信息,请告诉我!

0 投票
2 回答
798 浏览

c# - OAUTH 参数编码

在实施 OAUTH 时,我遇到了以下问题。在创建签名库时,应该再次编码编码参数还是应该在规范化参数时将编码参数排除在编码之外?

0 投票
1 回答
7510 浏览

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/

0 投票
1 回答
3395 浏览

php - 为什么 ë 百分比编码为 %EB 也编码为 %C3%AB?

当我在 Web 应用程序的表单中输入 ë 时,这是由 Google Chrome 编码为 %C3%AB 的百分比。

当我使用 PHP 的 urlencode('ë'); 这被编码为 %EB。

为什么编码不同?

如何使用与使用 PHP 4 的 Google Chrome 相同的编码进行编码?

0 投票
1 回答
65287 浏览

url - 将 URL 中的“/”更改为“%2f”不起作用

我有一个果园站点并且有以下问题:

如果我使用网址:http ://asiahotelct.com/tours/ct---chau-%C4%91oc---ha-tien-3n2%C4%91 ,没关系。但是当我将 url 更改/%2f(如:http ://asiahotelct.com/tours%2fct---chau-%C4%91oc---ha-tien-3n2%C4%91 )时,它不再起作用。

为什么/不能代替%2f

0 投票
2 回答
2317 浏览

html - 如何使用 XSLT 将 HTML 百分比编码转换为 Unicode?

网上有大量关于此的条目和答案,但它们都与我需要的方向相反。从我的 iTunes XML 中,我尝试使用 XSLT 样式表将数千个百分比编码的条目以多种语言转换为 Unicode 文本。除了跟踪每个字符并进行替换之外,我还缺少任何功能或过程吗?这是我正在使用的各种示例的一个小示例,第一行是 XML 字符串值,下一行是我尝试生成并输出到文本文件的基本文本。

/iTunes/iTunes 音乐/Droit devant/L'odyssée.mp3

À la Pêche

Запоминай

Κότσ̌αρι

对于某些人来说,最后一个可能无法正确显示,因为 hacek/caron 过于引人注目。

提前感谢您的任何建议或线索

0 投票
2 回答
952 浏览

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 会很棒 - 是否可以自己创建一个?