Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这个组件真的有用吗?_Php_Javascript_Encodeuricomponent - Fatal编程技术网

Php 这个组件真的有用吗?

Php 这个组件真的有用吗?,php,javascript,encodeuricomponent,Php,Javascript,Encodeuricomponent,在向服务器执行http get请求时,我仍然不明白使用JS函数encodeURIcomponent对http get的每个组件进行编码的优势是什么 在做一些测试时,我看到服务器(使用PHP)也正确地获取了httpget请求的值,如果我不使用encodeURIcomponent 显然,我仍然需要在客户端级别编码特殊字符&?=/:否则,像这样的http get值“peace&love=Destruction”将被视为http get请求的新键值对,而不是单个值。 但是为什么EncodeUriComp

在向服务器执行http get请求时,我仍然不明白使用JS函数encodeURIcomponent对http get的每个组件进行编码的优势是什么

在做一些测试时,我看到服务器(使用PHP)也正确地获取了httpget请求的值,如果我不使用encodeURIcomponent 显然,我仍然需要在客户端级别编码特殊字符&?=/:否则,像这样的http get值“peace&love=Destruction”将被视为http get请求的新键值对,而不是单个值。 但是为什么EncodeUriComponent还会对许多其他字符进行编码,例如“è”,它被翻译成%C3%A8,必须在PHP服务器上使用utf8èdecode函数进行解码

通过使用encodeURIcomponent,http get请求的所有值都是utf8编码的,因此在PHP中获取它们时,每次我都必须在每个$get值上调用utf8_decode函数,这非常烦人

为什么我们不能只编码&?=/:字符?

另见: 这表明encodeURIComponent甚至没有正确编码,因为一个简单的浏览器表单GET以不同的方式编码像“€”这样的字符。所以我仍然想知道这个组件的用途是什么

那是因为

统一资源标识符(URI)是 在[RFC3986]中定义为序列 从有限字符中选择的字符 剧目的子集 US-ASCII[ASCII]字符


因此官方不支持unicode;详情请参阅。但是,所有现代浏览器都支持它,这就是为什么您的结果很好。。但对于一些不支持它的浏览器或系统,您可以对其进行编码,并确保它在所有符合标准的浏览器中都能正常工作。

这是一个字符编码问题()。正如Gaby所说,URI是一个ASCII字符序列(因此只有范围为0–127的字节)。所以,任何其他非ASCII字符都需要使用

由于UTF-8是新的“通用字符编码”,现在用户代理将URI解释为UTF-8编码。但这些UTF-8编码的字本身也用百分比编码,因为URI不能包含除ASCII字符以外的任何其他字符

这意味着,当您输入
http://en.wikipedia.org/wiki/€
在浏览器的地址字段中,浏览器查找
(0xE282AC)的UTF-8代码,并对其应用百分比编码(
%E2%82%AC
)。所以
http://en.wikipedia.org/wiki/欧元
将实际导致
http://en.wikipedia.org/wiki/%E2%82%AC

要证明这是正确的,只需输入
http://en.wikipedia.org/wiki/%E2%82%AC
输入您的地址字段,您的浏览器可能会将其转换为
http://en.wikipedia.org/wiki/欧元
。这是因为现在的用户代理将URI解释为UTF-8编码

现在回到您最初的问题,为什么要明确应用百分比编码:假设您有一个网页,您想链接到欧元符号上的维基百科文章。如果您只是用一个普通的
来编写URI:

<a href="http://en.wikipedia.org/wiki/€">Euro sign</a>

您的浏览器将使用文档的字符编码作为
字符。这意味着,如果文档的编码为Windows-1252(如中所示),则
将编码为0x80,URI将编码为
http://en.wikipedia.org/wiki/%80
(这实际上是可行的,因为Wikipedia非常善于猜测,因为Windows-1252是最流行的字符编码,可打印字符位于0x80)

但是,如果您的文档编码为ISO 8859-15,
将被编码为0xA4,表示ISO 8859-1中的字节序列(Wikipedia将选择ISO 8859-1,因为0xA4在UTF-8和中是无效的字节序列)


因此,我建议始终使用百分比编码以避免错误。不要让用户代理猜到你的意思。

那么你基本上是说在现在的日子里我可以避免使用EncodeuriCompent吗?只需对特殊字符进行编码:“&”、“?”、“=”、“/”、“:”。这基本上适用于现在的绝大多数浏览器。它适用于大多数浏览器。。但请记住,URL也会发布在论坛/博客等中。。如果论坛/博客/etc不是Unicode格式,那么里面的url(应该链接到你的站点)可能会被弄乱。。