通过POST提交时删除的某些字符

时间:2012-02-29 14:56:38

标签: php html

我有两个问题

  1. 当我通过HTML表单(使用POST)提交角色'时,这很好。但是,在我允许修改提交内容的形式中,当它被引入时,'之后的任何内容都会消失。我推断这是因为当我将包含'的文本内容分配给文本字段时,它会关闭引号。例如,如果我在那里提交Hello,我就是John,它会:<input type=text value='Hello there I'm Jon /> 所以你看,I'm中的撇号关闭了value属性的引用。因此,我能想到的唯一解决方案是逃避撇号,但即使我将mysql_real_escape_string()函数留在内容上(因为它已提交到数据库转义并检索此表单)。
  2. 同样,当我提交&+时,它会消失。每当我尝试在任何地方打印时都会发生这种情况,无论使用htmlspecialchars()函数(我在印象中都应该使用HTML格式对这些字符进行编码,例如:&amp;)。例如,如果有人输入Me & you,则会显示为Me you
  3. 所以我问:我怎么能解决上面的问题,似乎与特殊字符有关,尽管已经将它们转义(我甚至尝试再次应用转义功能)?如果有任何我应该提供的示例代码,请告诉我,但我已经解释了我对每个输入做了什么。

3 个答案:

答案 0 :(得分:2)

  

当我通过HTML表单(使用POST)提交角色'时,这很好。但是,在我允许修改提交内容的形式中,当它被引入时,“消失”后的任何内容。我推断这是因为当我分配包含'到文本字段的文本内容时,它会关闭引号。例如,如果我在那里提交Hello,那么我会做:<input type=text value='Hello there I'm Jon />所以你看,我的撇号关闭了value属性的引用。因此,我能想到的唯一解决方案是逃避撇号,但即使我将mysql_real_escape_string()函数留在内容上(因为它已提交到转发并检索此表单的数据库)。

这与提交数据无关。您正尝试在以'个字符分隔的属性值中使用'

使用htmlspecialchars($data, ENT_QUOTES)

  

同样,当我提交&amp;或者+,它消失了。每当我尝试在任何地方打印它时都会发生这种情况,无论使用htmlspecialchars()函数(我在印象中都应该用HTML格式对这些字符进行编码,例如:&amp;)。举个例子,如果有人进入Me&amp;然后它将显示为“我”。

在编码为application / x-www-form-urlencoded &的数据中,表示“新密钥开始=值对”,+表示“空格”。您需要urlencode($data)

答案 1 :(得分:2)

首先,它有助于正确包含HTML属性,如下所示:

<input type="text" value="Hello there I'm Jon" />

我使用双引号,请注意该值的尾随引号,而原始单词没有。如果您将值包装在htmlentities()中,则可以在表单中正确显示/保存"或任何其他值。

虽然在HTML5中严格要求双引号('在大多数情况下都可以正常使用),但至少应该鼓励它们。如果您正在使用某些XHTML变体,则需要它们。

答案 2 :(得分:1)

这里做一些懒惰但快速的方法是在发布之前对字段的内容使用urlencode(),在另一边使用urldecode()。

这不是正确的方式,也不是好方法......但是如果你不想编写一些特定的代码来处理这些案例,它就可以了。