Php 编码URL导致来自浏览器的禁止消息的奇怪问题
为一些奇怪的事情做好准备。以下内容在Firefox中运行良好: 正在重定向到此URL:Php 编码URL导致来自浏览器的禁止消息的奇怪问题,php,javascript,internet-explorer,Php,Javascript,Internet Explorer,为一些奇怪的事情做好准备。以下内容在Firefox中运行良好: 正在重定向到此URL: http://localhost/webs/van/front-end/slr/edit_rule.php?rule_name=test&rule_type=alloc_ext©=1 但是,它在IE8中不起作用,因为它将上述内容转换为以下内容,请注意结尾地址中的版权符号: http://localhost/webs/van/front-end/slr/edit_rule.php?ru
http://localhost/webs/van/front-end/slr/edit_rule.php?rule_name=test&rule_type=alloc_ext©=1
但是,它在IE8中不起作用,因为它将上述内容转换为以下内容,请注意结尾地址中的版权符号:
http://localhost/webs/van/front-end/slr/edit_rule.php?rule_name=test&rule_type=alloc_ext©=1
所以,我觉得很奇怪,让我们来看看这个:
window.location.href = 'edit_rule.php%3Frule_name%3Dtest%26rule_type%3Dalloc_ext%26copy%3D1';
Firefox和IE8现在都给了我一条禁止的消息
您没有访问/webs/van/front-end/slr/edit_rule.php的权限?此服务器上的rule\u name=test2&rule\u type=alloc\u ext©=1
我不明白,发生了什么事
谢谢大家的帮助。
&
需要进行编码,而不是URI编码。具体地说,将其替换为&代码>
从技术上讲,IE8的行为是错误的,因为©
缺少结尾的分号,使其成为HTML编码的字符。&
需要进行编码,而不是URI编码。具体地说,将其替换为&代码>
从技术上讲,IE8的行为是错误的,因为©
在末尾缺少分号,使其成为HTML编码字符。IE8很可能试图更改并复制为版权符号-©代码>>)
更改参数名称将是一个简单的修复方法
我还看到您在规则名称前的问号后发布的错误消息中有一个空格,可能是它引起了一些奇怪。IE8很可能试图更改并复制到版权符号-©代码>>)
更改参数名称将是一个简单的修复方法
我还看到您在规则名称前的问号后发布的错误消息中有一个空格,可能是它引起了一些误解。©
是版权符号的HTML实体:©;Internet Explorer是Microsoft的一种产品,它试图用帮助来阻碍您,将不完整的实体转换为完整的实体,而此时它将造成最大的损害。@Robusto您完全正确,但为了公平起见,请使用适当的&代码>是W3C有效的解决方法。我想我可能只是让它使用encodeURI
而不是encodeURIComponent
@Pekka:一个很好的观点,这就是为什么当我使用Javascript构建查询字符串时,我倾向于在数组中创建它们,然后用“&”字符连接它们。文本字符串可能有问题,如本例所示。©
是版权符号的HTML实体:©;Internet Explorer是Microsoft的一种产品,它试图用帮助来阻碍您,将不完整的实体转换为完整的实体,而此时它将造成最大的损害。@Robusto您完全正确,但为了公平起见,请使用适当的&代码>是W3C有效的解决方法。我想我可能只是让它使用encodeURI
而不是encodeURIComponent
@Pekka:一个很好的观点,这就是为什么当我使用Javascript构建查询字符串时,我倾向于在数组中创建它们,然后用“&”字符连接它们。文字字符串可能会有问题,如本例所示。我刚刚尝试了一下,得到了相同的消息。禁止的消息现在显示为&
@Abs您需要删除encodeuri组件
。这仅适用于组件,不能使用it@Pekka-啊,我明白了!这是可行的,我想我现在必须转换这个URL,因为PHP无法选择GET变量。为什么要对符号进行编码?它被用作“复制”查询字符串变量的分隔符。如果它是变量名或值的一部分,则需要对其进行编码。听起来更改名称以消除bug是最好的主意。@R.Bemrose:在他的例子中,他是从javascript设置的,不需要在javascript代码中编码html字符。所以我不认为你在解决问题的原因,我认为你也在解决问题。我认为真正的原因是IE8对url的错误处理;我只是试了一下,得到了同样的信息。禁止的消息现在显示为&
@Abs您需要删除encodeuri组件
。这仅适用于组件,不能使用it@Pekka-啊,我明白了!这是可行的,我想我现在必须转换这个URL,因为PHP无法选择GET变量。为什么要对符号进行编码?它被用作“复制”查询字符串变量的分隔符。如果它是变量名或值的一部分,则需要对其进行编码。听起来更改名称以消除bug是最好的主意。@R.Bemrose:在他的例子中,他是从javascript设置的,不需要在javascript代码中编码html字符。所以我不认为你在解决问题的原因,我认为你也在解决问题。我认为真正的原因是IE8对url的错误处理;这只是我的复制和粘贴,没有空格或换行。抱歉。这只是我的复制和粘贴,没有空格或换行符。道歉。