mysql_real_escape_string没有逃脱“

时间:2011-12-08 22:20:43

标签: php mysql wordpress mysql-real-escape-string

在PHP中,我在使用mysql_real_escape_string插入MySQL数据库之前转义字符

$array_to_insert = array_map('mysql_real_escape_string', $my_arr);
$mysql->setTbl("mytable");
$id = $mysql->insertArray($array_to_insert);

保存时,双引号会被保存为\转义。我不希望这样,因为有些数据是HTML,它可能包含<a href="www.stackoverflow.com">等标签,这些标签将保存为<a href=\"www.stackoverflow.com\">,然后在WordPress设置中显示不正确。

我已经在stackoverflow上的其他地方读过,为了避免转义双引号,必须首先插入(如上所述)然后选择并再次插入表中。

有没有办法解决这个问题而无需选择并重新插入?

由于 (注意:我使用的数据库是utf-8格式)

2 个答案:

答案 0 :(得分:4)

您的服务器可能启用了magic_quotes。用

检查
var_dump( get_magic_quotes_gpc() );

否则,它可能是您事先正在做的事情或您的数据库库正在做的事情。 mysql_real_escape_string仅转义字符串,以便在SQL查询中使用它是安全的。如果字符串已经开始转义,它就无济于事。

答案 1 :(得分:2)

您可以使用http://php.net/manual/en/function.stripslashes.php

随时删除斜线

例如:

$sql = "SELECT * FROM table_name";
$result = mysql_query($sql) or mysql_error();
while ($output = mysql_fetch_assoc($result)) {
  echo stripslashes($output['column_name']);
}

或者,只需删除所有转义的双引号:

echo str_replace('\"', '"', $output['column_name']);