JS/PHP cross urlencoding and urldecoding


JS/PHP cross urlencoding and urldecoding

好吧,我已经为此搞砸了几个小时了,但我仍然无法正确处理,所以我要问你们。

我在html中有一个文本区域,该值需要使用ajax(jquery)发送到php,然后归入数据库,并使用php再次打印。问题是我希望打印时与您输入的内容 100% 相同。包括''等角色

我现在怎么做:

var comment = escape( box.find('#newCommentArea').val() ).replace(new RegExp( "''+", "g" ),"%2B");

其中box.find('#newCommentArea').val()是值。我使用 ajax 函数将comment传递给 php 并将其作为 POST 数据提交。

使用Firebug,这似乎是发送的:comment=asdf%27asdf

用PHP打印$_POST['comment']给了我asdf''asdf

添加'是一个问题。 我需要摆脱它。

无论哪种方式,因为只有JavaScript转义在PHP中不安全,我也这样做urlencode()

打印时我使用rawurldecode()

你们能否指出这种方法是否好,或者是否可以做得更好。

我如何摆脱$_POST['comment']中的新'

提前感谢,

真仓山

斜杠是自动添加的,PHP或服务器的设置可以更改(但通常不应该)。您可以使用stripslashes()(PHP:stripslashes)来反转它。在显示之前立即使用此函数,因此不要在存储到数据库中之前使用。

如果已经发送了,则不再需要在 PHP 中使用 urlencode(urlencode 需要在发送之前),您只需要确保它是数据库安全的。

不幸的是,我

不能建议你什么是URL编码的最佳方法,我自己往往会对此感到困惑:)希望其他人能够澄清这一点。

当您打印保存在数据库中的文本时,''将显示为 ' 。因此,可以将值保存到数据库中 '' .

此外,如果您使用 jQuery 发出请求,则无需在请求之前转义'字符,这应该正确打包。

但是,在将文本保存到数据库之前,您确实需要小心清理 PHP 中的文本(使用 mysql_real_escape_string http://php.net/manual/en/function.mysql-real-escape-string.php )。