我已经制作了一个表单,当我用斜杠发送值时,在同一页面中我读取表单输入发送的url值并从$ _POST请求值打印它。但是有些奇怪的事情会发生,如果句子不包含斜杠,它会全部读取。如果它包含一个斜杠,它会读取请求,直到斜杠和其余部分不打印。我使用了urldecode和stripslashes,但是在打印斜杠之后总是使用其余部分。
<form autocomplete='off' style='margin-left:8px;' method='POST' name='form'>
<input type='hidden' value='$parameters2' name='de'>
<input type='hidden' value='$parameters' name='ef'>
<input type='hidden' value='$parameters4' name='dee'>
<input autocomplete='off' id='text' type='text' name='query_string' size='17' class='BodyCopy' style='border: none; width:89%; font-family:monospace; font-size:12px;' autofocus></form>
$parameters = $_POST['query_string'];
$parameters3 = $_POST['de'];
$parameters4 = $_POST['ef'];
$parameters5 = $_POST['dee'];
echo $parameters;
echo $parameters3;
echo $parameters4;
echo $parameters5;
答案 0 :(得分:1)
我们假设$parameters2 = "Hello, I'm Tom!"
。
现在让我们来看看我们的输入字段:
// This
<input type='hidden' value='$parameters2' name='de'>
// becomes this
<input type='hidden' value='Hello, I'm Tom!' name='de'>
由于HTML错误 - 我们无法发送完整的字符串。但不要担心 - addslashes()将节省一天。
// This
<input type='hidden' value='addslashes($parameters2)' name='de'>
// becomes this
<input type='hidden' value='Hello, I\'m Tom!' name='de'>
// And to get the proper value..
$parameters2 = stripslashes($_POST['de']);
答案 1 :(得分:1)
如果斜杠出现在撇号之前,它会将其转义,以便它不再终止属性。
e.g。
现在价值等于:
value='test\' name='
而不是:
value='test'
您可以通过添加逃脱转义器的斜杠来修复它!
<input type='hidden' value='addslashes($parameters)' name='de'>
$parameters = stripslashes($_POST['query_string']);
echo $parameters;
?>
答案 2 :(得分:0)
问题是没有收到数据(您在POST表单字段中输入的所有数据应按照输入中的1:1到达服务器)。
问题可能是显示数据,或者更确切地说是在HTML中使用该数据。
在您的示例中,您将在隐藏输入中设置变量值。直接这样做是错误的,因为在HTML中具有特殊含义的任何字符都会破坏您的HTML。一些例子是:$ parameters2包含:
foo'bar
=&GT;你的HTML将最终成为:
<input type='hidden' value='foo' bar name='de'>
这显然不是你想要的。
在将数据嵌入
之前,尝试通过 addslashes ()和 htmlentities ()来破坏数据<input type="hidden" value="..." />
像这样:
$parameters2 = addslashes(htmlentities($parameters2));
此后,将值嵌入HTML中。
如果要在HTML标记属性之外显示值,请执行以下操作:
<p>$parameters2</p>
..那么你应该只需要htmlentities()。当您需要在HTML标记属性中嵌入值时,可以使用添加滑动。
注意:addslashes-htmlentities并不涵盖所有情况。如果我没记错的话,至少换行仍然会破坏你的HTML标签属性。
答案 3 :(得分:0)
好的,我找到了解决问题的解决方案。我只需要使用html代码引号替换撇号,这是&amp;#39或不同类型的撇号;。我还必须使用stripslashes来删除url生成的斜杠。表单标记不需要是改变。 所以正确的代码是:
$parameters = stripslashes(str_replace("'", "'",$_POST['query_string']));
$parameters2 = stripslashes(str_replace("'", "'",$_POST['de']));
$parameters3 = stripslashes(str_replace("'", "'",$_POST['ef']));
$parameters5 = stripslashes(str_replace("'", "'",$_POST['dee']));