JS / PHP交叉urlencoding和urldecoding

时间:2012-04-20 09:43:30

标签: php javascript escaping urlencode urldecode

好吧,我现在已经搞乱了几个小时,我仍然无法做到这一点,所以我会问你们。

我在html中有一个textarea,需要使用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

在pp中打印$_POST['comment']给了我asdf\'asdf

添加的\是个问题。我需要摆脱它。

无论哪种方式,因为只有javascript转义在php中不安全我也会urlencode()

打印时我使用rawurldecode()

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

我如何摆脱\

中的新$_POST['comment']

提前致谢,

MakuraYami

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

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

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