1

我制作了一个表单,当我用斜杠发送值时,在同一页面中,我读取表单输入发送的 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;
4

4 回答 4

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']);
于 2013-09-28T09:27:12.127 回答
1

如果斜线出现在撇号之前,它会将其转义,以便不再终止该属性。

例如

现在的值等于:

value='test\' name='

代替:

value='test'

您可以通过添加逃脱逃逸者的斜线来修复它!

<input type='hidden' value='addslashes($parameters)' name='de'>

     $parameters = stripslashes($_POST['query_string']);

     echo $parameters;

?>
于 2013-09-28T09:27:49.947 回答
0

问题是没有接收数据(您在 POST 表单字段中输入的所有数据都应该按照输入中给出的 1:1 到达服务器)。

问题可能在于显示数据,或者更确切地说是在 HTML 中错误地使用了该数据。

在您的示例中,您正在隐藏输入中设置变量值。直接这样做是错误的,因为任何在 HTML 中具有特殊含义的字符都会破坏您的 HTML。一些示例是: $parameters2 包含:

富吧

=> 你的 HTML 最终会变成:

<input type='hidden' value='foo' bar name='de'>

这显然不是你想要的。

数据嵌入到

<input type="hidden" value="..." />

像这样:

$parameters2 = addslashes(htmlentities($parameters2));

只有在那之后,将值嵌入到 HTML 中。

如果您在 HTML 标记属性之外显示值,如下所示:

<p>$parameters2</p>

..那么你应该只需要 htmlentities()。Addslashes 用于当您需要在 HTML 标记属性中嵌入值时。

注意:addslashes-htmlentities 并不涵盖所有情况。如果我没记错的话,至少换行符仍会破坏您的 HTML inside tag 属性。

于 2013-09-28T09:34:28.950 回答
0

好的,我为我的问题找到了解决方案。我只需要用 HTML 代码引用替换撇号,它是 ' 或不同类型的撇号;。此外,我必须用户使用 stripslashes 才能删除由 url 生成的斜杠。不需要更改表单标签. 所以正确的代码是:

 $parameters = stripslashes(str_replace("'", "&#39;",$_POST['query_string']));
 $parameters2 = stripslashes(str_replace("'", "&#39;",$_POST['de']));
 $parameters3 = stripslashes(str_replace("'", "&#39;",$_POST['ef']));
 $parameters5 = stripslashes(str_replace("'", "&#39;",$_POST['dee']));
于 2013-09-28T17:48:46.940 回答