【问题标题】:PHP result from mySQL doesn't show quotes inside input value来自 mySQL 的 PHP 结果未在输入值内显示引号
【发布时间】:2012-02-02 18:01:56
【问题描述】:

我正在使用“mysql_real_escape_string”将数据插入到 mySQL。

为了检索它,我使用带斜杠回显它,它工作正常,除非我将值放入输入值中,如本例所示。单引号可以正常工作,例如:Milky's Home... 但是双引号会在第一个引号中剪切脚本:。示例:Milky 的“家”应该只有:Milky's

如果我删除stripslashes,它会显示:Milky/'s /

所以,还是删掉第一句。

这是脚本:

$id=mysql_real_escape_string($_POST[id]);

<?
echo stripslashes($Titlez['titlez']);
?>
<input type="text" size="150px" name="titlez" value="<? echo stripslashes($Titlez['titlez']); ?>">

我也尝试了这两个选项,但给出了相同的结果:

<?
$titlez = stripslashes($Titlez['titlez']);
echo '<input type="text" size="150px" name="titlez" value="'.$titlez.'">';
echo "<input type=\"text\" size=\"150px\" name=\"titlez\" value=\"".$titlez."\">";
?>

【问题讨论】:

  • 您应该在传入数据上使用 stripslashes(),然后再将其保存到数据库中。此外,正如您所发现的,魔术引语真的很糟糕。如果可以,请关闭它们。
  • 我建议您将代码转换为 PDO,使用准备好的语句,这样它将保护您免受 MySQL 注入。使用 PDO,您不应该关心 mysql_real_escape_string。

标签: php mysql sql


【解决方案1】:

试试这个

$titlez = htmlentities(stripslashes($Titlez['titlez']));

【讨论】:

    【解决方案2】:

    当你设置数据输入时必须使用htmlentities(),它会照顾双引号。

    http://php.net/htmlentities

    【讨论】:

      【解决方案3】:

      除了将数据插入 MySQL 之外,您不应将 mysql_real_escape_string 用于其他任何事情。此外,一旦数据存储在数据库中,mysql_real_escape_string 添加的斜杠(或用于转义特殊字符的任何内容)将被删除,因此当您从数据库中提取数据时,您不需要使用“stripslashes”或任何其他非转义方法。

      正如其他人已经提到的,如果您还没有禁用 php.ini 中的 Magic Quotes,那么您将需要禁用它。否则,额外的斜线将自动添加到任何请求数据中。

      将数据嵌入 HTML 后,您将使用 Rezigned 提到的 htmlentities 正确转义特殊字符。

      【讨论】:

      • 感谢大家,我很容易在文件夹 MAMP/conf/php5.2/php.ini 中找到了 php.ini 我用文本编辑器打开它并将 magic_quotes_gpc = On 更改为 Off
      • @GordonM 但是如何在服务器中修改它。这是一个 VPS,在 ISPconfig 中我看到了这个 /etc/php5/apache2/php.ini 但在 FTP 中我看不到到达那里的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      相关资源
      最近更新 更多