表单上的链接和样式被破坏到mysql,是不是因为mysql_real_escape_string?

时间:2011-02-25 01:45:55

标签: php mysql mysql-real-escape-string broken-links

为了保持安全被告知

如果我要显示

,请在发送到Mysql之前使用mysql_real_escape_string 我做得很好:

....

   $b = mysql_real_escape_string($b);
   $r_int = mysql_real_escape_string($r_int);
   $r_ext= mysql_real_escape_string($r_ext);

   $id_tmp = $_SESSION['id'];
   $insert = "INSERT INTO table (nombre, coment, iduser,fecha)
                           VALUES ('$b','$r_int','$id_tmp',NOW())";
....

但如果这些值包含任何<a href="where">go</a>,则会变为<a href="\where\">go</a>

和..我不能去!哈哈,

我该如何解决这个并保持安全?

谢谢你!

2 个答案:

答案 0 :(得分:2)

听起来你可能已经开启magic_quotes_gpc或其中一个。较旧的PHP版本会自动转义所有内容,因此通过执行mysql_real_escape_string()(您应该如此),您实际上添加了另一层转义。

正确的解决方案是关闭magic quotes。它们已被弃用,应该关闭,并继续使用mysql_real_escape_string()

注意:关闭magic_quotes必须从php.ini或httpd.conf / .htaccess中的php_value完成。你不能从in-script ini_set()中做到这一点,因为在执行ini_set时,PHP已经完成了魔术引用。

答案 1 :(得分:1)

PHP的stripslashes函数

echo stripslashes($string);

取出斜杠并像原来那样显示