此问题涉及URL的查询字符串部分中的?
字符,这些字符出现在标记字符之后.
根据维基百科,某些字符保持原样,其他字符编码(通常带有%
转义序列).
我一直试图将其跟踪到实际规格,以便我理解维基百科页面中每个要点背后的理由.
矛盾例1:
在HTML规范说来编码空间,+
并按照其余RFC1738.但是,这个RFC说这~
是不安全的,而且"[a] ll不安全的字符必须始终在URL中编码".这似乎与维基百科相矛盾.
实际上,IE8 ~
在它生成的查询字符串中进行编码,而FF3则按原样进行编码.
矛盾示例2:
维基百科指出,它未提及的所有字符都必须进行编码.!
在维基百科中没有提到.但是RFC1738声明这!
是一个"特殊"字符并且"可以使用未编码的".这似乎与维基百科相矛盾,维基百科说它必须编码.
实际上,IE8 !
在它生成的查询字符串中进行编码,而FF3则按原样进行编码.
据我所知,这可能是为了对那些在维基百科和规范之间存在疑问的字符进行编码.甚至可能编码所有不是[A-Za-z0-9]的东西.我想知道这方面的实际标准.
结论
维基百科上描述的算法精确编码那些不是RFC3986非保留字符的字符.也就是说,它编码除字母数字和字母之外的所有字符-._~
.作为一种特殊情况,空间被编码为+
而不是%20
RFC3986.
某些应用程序使用较旧的RFC.为了比较,RFC2396无保留字符是字母数字和!'()*-._~
.
为了比较,HTML5工作草案算法编码除字母数字和字母以外的所有字符*-._
.空间的特殊情况编码仍然存在+
.值得注意的差异*
是未编码和~
编码.(从技术上讲,这种处理*
与RFC3986是兼容的,即使它*
是在reserved
因为它sub-delims
在query
生产中允许的范围内.)
根据php手册也没有php://输入也不能$HTTP_RAW_POST_DATA
用于multipart/form-data
POST请求.
"php:// input允许你读取原始POST数据.它是一种内存密集程度较低的替代品,$HTTP_RAW_POST_DATA
不需要任何特殊的php.ini指令.php://输入不可用enctype="multipart/form-data"
."
如何获取multipart/form-data
表单的原始数据?
我有问题,PHP用POST和GET变量中的下划线替换所有空格.
例如,如果我有URL:http://localhost/proxy.php?user name = Max,浏览器会将其转换为http://localhost/proxy.php?user%20name = Max.
但是如果我给出$ _GET参数,那么键不是用户名而是user_name!
有没有可能改变这种行为?
在PHP文档中,我发现了以下部分:
变量名中的点和空格将转换为下划线.例如
<input name="a.b" />
变成$_REQUEST["a_b"]
.
我知道,虽然PHP不能让变量$a.b
的register_globals
,但这种解释并不令我完全满意.虽然确实register_globals
会这样做(或者,即使因为没有${'a.b'}
),但是为什么它会影响全局变量,比如$_GET
技术上你必须从开始就给出字符串(所以PHP程序员不能忘记有关${'a.b'}
的东西)的情况$_GET
).
为什么它只影响点和空间?虽然我可以理解点(<input type=image>
),为什么它会影响空间.连字符怎么样?
我会解析以下字符串:
$str = 'ProceduresCustomer.tipi_id=10&ProceduresCustomer.id=1';
parse_str($str,$f);
Run Code Online (Sandbox Code Playgroud)
我希望将$ f解析为:
array(
'ProceduresCustomer.tipi_id' => '10',
'ProceduresCustomer.id' => '1'
)
Run Code Online (Sandbox Code Playgroud)
实际上,parse_str
回报
array(
'ProceduresCustomer_tipi_id' => '10',
'ProceduresCustomer_id' => '1'
)
Run Code Online (Sandbox Code Playgroud)
除了编写我自己的函数之外,还有人知道是否有php函数吗?
所以我正在编写一个简单的长轮询测试应用程序,并努力清除所有错误,我直接进入浏览器中的处理页面,并预先输出所有内容,看看发生了什么,这就是我来的起来...我去了网址......
localhost/long_polling/poll.php?user.user1=logged_in&user.user2=logged_out&user.user3=logged_out
Run Code Online (Sandbox Code Playgroud)
poll.php中我的php代码的第一行(用于测试)是
echo "<pre>";
print_r($_REQUEST);
echo "</pre>";
Run Code Online (Sandbox Code Playgroud)
产出是什么
Array
(
[user_user1] => logged_in
[user_user2] => logged_out
[user_user3] => logged_out
)
Run Code Online (Sandbox Code Playgroud)
有没有人知道它为什么用"_"替换用户名中的"."?我在数据库中的所有用户名都是firstname.lastname,所以这一切都失败了.如果这只是默认的PHP行为,虽然可怕,是否有比使用像...更好的解决方案
foreach($_REQUEST as $key => $value) {
$statuses[str_replace('_', '.', $key)] = $value;
}
Run Code Online (Sandbox Code Playgroud)
我只是不喜欢这样,因为如果以后有什么东西使用它并且其中实际上有"_".
感谢您的帮助
几个小时以来一直被困在这个集成问题上。我正在尝试使用https://pubsubhubbub.appspot.com/subscribe订阅 YouTube 频道更新 。
我的服务器设置为响应:
但是当我按下DO IT 时,我总是会收到错误信息,说Challenge mismatch。
我不确定要设置哪个参数。
youtube-api publish-subscribe node.js youtube-data-api websub