发送以下表单后,在MS Edge浏览器(#
)中显示一个字符Microsoft Edge 42.17134.1.0, Microsoft EdgeHTML 17.17134
,我们可以预期最终结果应为OK!
。预期结果将在其他流行的浏览器中显示。用带有Doctype等的正确HTML5框架包装表单无济于事。为什么某些特定的文本不能通过表格发送?好吧,严格来说,只要我不触摸$_POST
,或者我不想在发送表单的网页上包含此元标记,就可以做到这一点。我可以通过php://input
访问发布数据,所有内容都原始存在,但这不是解决方案。
这个问题是在我自己的内容管理框架中发现的,其中一些标签(包括元标签)通过表单发送到PHP脚本。
<?php
if(isset($_POST['test'])){
echo "OK!";
} else{
echo '
<form action="/" name="template" method="post" accept-charset="UTF-8">
<textarea name="test"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></textarea>
<input type="submit" />
</form>
';
}
?>
自然地,源代码也与UTF-8一起保存。请把我拖离这条路,以防我做被禁止或可能做错的事情。最终,我想通过POST方法发送完整的HTML标头部分。
这是我的问题:
<meta charset="UTF-8" />
的文本?在这里,毫无疑问通过PHP脚本处理数据。#
来自Web服务器还是边缘浏览器?我正在Windows 10上使用XAMPP 7.2.4
。
答案 0 :(得分:0)
#
而不是错误消息的意义是什么。该问题的原始问题仅与XAMPP <=> MS Edge有关,与PHP脚本或UTF-8编码无关。在社区中已确定,应将带有字符集的元标记用作安全机制,但不能预料的是,此元标记可能会影响显示网站内容或仅影响#
。应该特别强调的是,其他标签没有未出现类似的问题。可以重复该场景的最简单的情况是使用GET方法,甚至将表单数据发送到HTML文件。
http://127.0.0.1/?data=%3Cmeta+http-equiv%3D%22%22+%2F%3E
Apache服务器的其他不错的安装都没有这样的问题(我在Windows上尝试过apachelounge,而在其他Linux发行版上尝试过Apache安装)。因此,我声称重现该问题可能很困难,并且可能是特定于安装的。
最简单的解决方案是使用XAMPP的其他版本或httpd服务器的其他实现 。
对于那些仍然感到好奇的人,仍然没有解释为什么XAMPP服务器仅来自MS Edge的请求有问题。典型的HTTP请求
GET /?data=%3Cmeta+http-equiv%3D%22%22+%2F%3E HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
似乎没有任何非常规的东西。 MS Edge与User-Agent
有明显的区别
GET /?data=%3Cmeta+http-equiv%3D%22%22+%2F%3E HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134
Accept-Language: pl-PL
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Upgrade-Insecure-Requests: 1
Accept-Encoding: gzip, deflate
Host: 127.0.0.1
Connection: Keep-Alive
Cookie: PHPSESSID=*********
和 Cookie ,以及 Accept-Language (接受语言):仅限pl-PL。令我惊讶的是,事实证明清除浏览器数据解决了我的问题。