2012-02-29 81 views
2

提交了一些人物,我有两个问题删除当通过POST

  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

所以我问:如何解决上述问题,似乎与特殊字符有关,尽管已经让他们逃脱了(我甚至尝试再次应用转义函数)?如果有任何示例代码我应该提供,请告诉我,但我已经解释了我对每个输入所做的操作。

回答

2

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

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

使用htmlspecialchars($data, ENT_QUOTES)

同样地,当我提交&或+,它就会消失。无论使用htmlspecialchars()函数(我在印象之下应该用HTML格式对这些字符进行编码,例如:&),我都会在任何时候尝试在任何地方打印它。举个例子,如果有人进入我&你那么它会显示为我你。

在编码为应用程序/ x-WWW窗体-urlencoded &数据的意思是“新的键=值对启动”和+手段“的空间”。你需要urlencode($data)

+0

你对urlencoding正确,但这不应该是'POST'数据的问题......对吧? – davethegr8 2012-02-29 15:05:37

+0

@ davethegr8 - POST数据通常编码为application/x-www-form-urlencoded数据,使用与urls相同的格式。 – Quentin 2012-02-29 15:07:28

+0

所以,最后我会把'urlencode(htmlspecialchars($ data,ENT_QUOTES));'包含任何这些字符的所有字段? – muttley91 2012-02-29 15:23:23

2

首先,它有助于正确地包含HTML属性,就像这样:

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

我使用双引号,注意在值,你原来没有尾随报价。如果您随后将值包含在htmlentities()中,您将能够正确显示/保存"或表单中的任何其他值。

尽管HTML5中并非严格需要双引号('在大多数情况下都能正常工作),但他们至少受到鼓励。如果您使用XHTML的一些变体,则它们是必需的。

+0

XHTML [不关心你是否使用双引号或单引号](http://www.w3.org/TR/xml /#NT-AttValue)。除了约定之外,我从来没有看到任何令人鼓舞的事情。 – Quentin 2012-02-29 15:05:34

+0

我为此使用单引号的唯一原因是因为我是从PHP打印的,因此写单引号比双引号更容易。但无可否认,在这种情况下,它可能解决我与'''有关的问题。 – muttley91 2012-02-29 15:19:11

+0

直到你开始处理包含''''的数据。 – Quentin 2012-02-29 15:28:43

1

一个懒惰但快速的方法是在发布之前在字段的内容上使用urlencode(),而在另一侧使用urldecode()。

这不是正确的方式,或者不错的方式......但如果你不想编写一些特定的代码来处理这些情况,它就可以工作。