好吧,我已经为此搞砸了几个小时了,但我仍然无法正确处理,所以我要问你们。
我在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 )。