【问题标题】:mysql_real_escape_string does not escape "mysql_real_escape_string 不会转义"
【发布时间】:2012-01-16 08:01:15
【问题描述】:

在 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格式)

【问题讨论】:

  • 你在哪里读到插入/选择/插入?这是一个糟糕的解决方案 - simshaun 的答案应该只是涵盖它,因为这确实有双重转义问题的味道。

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


【解决方案1】:

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

var_dump( get_magic_quotes_gpc() );

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

【讨论】:

  • magic_quotes 自 PHP 5.3.0 起已弃用,自 PHP 5.4.0 起已移除。这不是问题!
【解决方案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']);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 2011-07-27
    • 1970-01-01
    相关资源
    最近更新 更多