URL中有斜杠时无法打印完整的URL文本

时间:2013-09-28 09:08:07

标签: php url

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

答案 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("'", "&#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']));