这是我曾经遇到的最奇怪的PHP问题。几分钟前,我注意到我的脚本停止正常工作。为了简短起见,在调试后我发现如果POST表单中的任何变量有<一开始的符号,PHP不再处理它。这是非常奇怪的,因为我的代码工作了多年。现在,这个问题不仅发生在localhost上,还发生在2个不同的服务器上(只是在那里安装了脚本进行测试)。因此,问题无论如何都与PHP配置有关。
这是我用来获取通过POST表单提交的所有变量的实际代码:
if (isset($_POST)) {$form_array=$_POST;} //super variable with all form variables
然后我"提取"数组值以创建具有正确值的实际变量。但它现在停止了工作。我添加了额外的代码行来调试提交的变量:
print_r($form_array);
如果我在表单中输入something
并提交,结果为:
Array ( [var1] => something [submit_ok] =>)
但是,如果我输入<something
,结果为:
Array ( [submit_ok] => )
变量甚至不存在!如果我输入something<
,它会再次开始工作。但是,如果我输入something<here
,它就不会再次运作了。简而言之,如果表单中的任何值包含&lt;符号后跟任何字母,变量甚至不存在。怎么了?
P.S。添加表单的HTML代码(这是完整的代码):
<form action="test.php" method="post">
<input type="text" name="var1">
<input type="submit" name="submit_ok" value="do">
</form>
答案 0 :(得分:1)
我,假设您在浏览器中对此进行测试,请认为只是浏览器将<
符号解释为HTML标记的开头,然后尝试渲染它,但失败了,因为它没有知道如何处理<something>
标记。
如果这是您在浏览器中看到的内容:
但是按下CTRL + U(在Chrome中)后你会看到:
然后它只是一个渲染“问题”,我的计算是正确的。
考虑在PHP
文件中添加它,因为它告诉浏览器不要将输出视为HTML而是将其视为纯文本:
<?php
// This must be called before _any_ other output is sent to the client.
header('Content-type: text/plain');
答案 1 :(得分:-1)
我没有合理的解释,但是一旦我重新启动所有设备(路由器,服务器,计算机),一切都恢复到正常状态。我注意到,在计算机重启后,Firefox已经更新了(所以也许这个更新会以某种方式导致问题,不知道)。
无论如何,一切都正常工作而不修改一行代码。
答案 2 :(得分:-2)
少于获取URL编码为&#34;%3C&#34;所以打印它不会起作用,因为浏览器会将其视为损坏的HTML标记,但是如果你......
$var1=urldecode ($_POST['var1']);
在数据库查询中使用$ var1之前,它应该可以工作。要实际打印它,你可以做
echo html_entity_decode(urldecode($var1));