问题标签 [rfc1738]
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.
php - SagePay 表单 - 编码为 RFC1738 时成功/失败 URL 失败
我们只是升级到 v3.0,同时重构我们的代码。
在这样做的同时,我们注意到当使用http_build_query
which 采用关联数组并将其转换为 RFC1738 有效 URL 时,SagePay 失败并出现以下错误:
提交到 SagePay 端点的表单的 enctype 为application/x-www-form-urlencoded
.
但是...如果我们手动构建要加密的字符串,请执行以下操作:
有用...
现在,据我了解 RFC1738,如果 url 中存在 url,则应该对其进行编码,即
RFC1738:
贤者支付:
当然,如果 SagePay 遵循 RFC1738,对 URL 进行编码应该可以吗?还是因为字符串是加密的,这意味着它并不重要?
有什么想法吗?
谢谢
加文
http - 必须在 URL 路径中同等对待“@”和“%40”吗?
根据投票最多的答案,@
不是 URL 路径中的保留字符(尽管它在主机中)。
但是,给定@
路径中的一个,URL 编码的形式是否可以互换?换句话说,twitter.com/@user
严格等价于twitter.com/%40user
?
在实践中,它们似乎经常可以互换使用,但很好奇是否严格如此(例如AbC@gmail.com
,在技术上与 不同abc@gmail.com
,但几乎每个人都将它们视为相同)。
更广泛地说,什么时候需要将字符和 URL 编码版本视为相同,以及何时不同(例如,与 不同example.com/path%2Fasdf
)example.com/path/asdf
……</p>
url - URL中的第一个斜杠是强制性的吗?
今天我们和同事争论这是否是一个有效的 URL http://domain.com?some_param=1
。定义 URL 结构的 RFC 没有明确声明这是无效结构。根据RFC 1738,第 3.3 部分
但是,在同一文档的第 3.1 部分末尾,它说
用 curl 检查发现了一些有趣的事情
所以,问题是
这是一个有效的 URL 吗?http://domain.com?some_param=1
url - 为什么 URL 编码中的特殊字符“$-_.+!*'()”很特殊?
因此,只有字母数字、特殊字符“$-_.+!*'()”和用于其保留目的的保留字符可以在 URL 中未编码地使用。
经过一番搜索,我总结出应该编码的字符有以下三种:
- 不安全字符:'#'、''、'"'、'%'、'<'、'>'、'{'、'}'、"|"、''、'^'、'~'、' [', ']', '`'。
- 保留字符:';'、'/'、'?'、':'、'@'、'='、'&'。
- 特殊字符:"$-_.+!*'(),"
我知道为什么以及何时应该对不安全字符和保留字符进行编码。RFC1738 规定可以使用未编码的特殊字符,但我发现urllib2.quote
也可以将这些特殊字符编码为"%24-_.%2B%21%2A%27%28%29%2C%7E"
. 所以,我有点困惑,如果特殊字符可以在 URL 中未编码使用,为什么要编码特殊字符,以及为什么它们是特殊的。
r - 使用 R 对 RFC1738 进行 URL 解码(PHP 默认)
我需要使用使用 RFC 1738 进行 URL 编码的 R字符串进行解码。
这些字符串来自 PHP 请求,并使用默认使用 RFC1738http_build_query
的 PHP 函数进行编码。
例如,Hello, World!
变成Hello%2C+world%21
。
您可以使用以下 PHP 代码轻松在线试用:
不幸的是,R 基础 URL 编码使用 RFC 3986,这是不同的!
我想"Hello, world!"
回来!我怎么能用 R 做到这一点?
我很高兴将
+
符号替换为空格,但如果这是您的答案,请说明为什么这是正确的。到目前为止,我的研究并未表明 RFC 1738正是带有加号的 RFC 3986,我不想要奇怪的边缘情况......