【问题标题】:How to pass apostrophies from text areas to MySQL using PHP如何使用 PHP 将撇号从文本区域传递到 MySQL
【发布时间】:2012-12-04 20:52:02
【问题描述】:

我有一个文本区域,用户也可以添加注释。在下一页上,我使用$_POST[Comments] 来显示输入的内容。我有一个编辑按钮,可以返回查看输入的内容并编辑注释,但是当我显示 $_POST[Comments] 时,它会显示所有内容,直至撇号。

例子:

原始输入:Let's try this.

编辑时:Let

现在,当我将它传递给服务器进行 SQL 添加时,我使用以下函数来防止 SQL 注入

function keepSafe($value) {
        if (get_magic_quotes_gpc()) {
            $value = stripslashes($value);
        }
        if (!is_numeric($value)) {
            $value = "'" . mysqli_real_escape_string($value) . "'";
        }
        return $value;
    }

以下是我用来格式化输入以进行 SQL 插入的内容。

$Comments = str_replace("\n","<br />",$_POST['CustComments']);
    $Comments = keepSafe($_POST['Comments']);

在提交之前进行编辑时,我需要能够看到注释部分中的所有撇号。而且我想确保当我提交它是一个 SQL 注入阻止安全代码。

【问题讨论】:

  • 您首先使用$_POST['CustComments'],然后在最后一个示例中使用$_POST['Comments'],如果这很重要(对您来说应该)。此外(不是特定于答案),您应该替换 \r\n 而不仅仅是 \n (从 Windows 的角度来看)。另外(不具体回答),您应该使用准备好的语句而不是直接变量插入(因为您使用的是 mysqli)。
  • 看起来您正在从一个非常古老的来源获取示例代码。魔术引号很久以前就从 PHP 中删除了。至于如何正确处理,这就是prepared statements的用途。

标签: php textarea apostrophe


【解决方案1】:

撇号的问题:

您可能使用这样的输入:

<input type='text' value='<?php echo $value;?>'/>

问题是,如果值有撇号,就会发生这种情况:

<input type='text' value='Let's play'/>

所以值标签由于变量中的撇号而结束。

要修复它,只需使用带有 ENT_QUOTES 的 htmlspecialchars:

<?php 
 $value = htmlspecialchars("Let's play", ENT_QUOTES);
?>
<input type='text' value='<?php echo $value; ?>'/>

这样撇号会被编码,并且可以在您的表单中进行编辑

关于 SQL 注入:

只需使用mysqli's prepared statements 就可以了。为了让您免受 XSS 攻击,请始终在 HTML 输出中输入htmlspecialchars 用户输入。更好的方法是将输入过滤为您需要的内容,然后仅将过滤后的输入保存到您的数据库中。

【讨论】:

  • 让我添加这个。如何使用 mysql 插入将文本区域中的撇号存储到数据库中
  • 您需要使用准备好的插入。或者您可以使用mysqli_real_escape_string( "let's play" );(我建议使用准备好的声明。您可以在我在遮阳篷中提供的链接中找到有关该声明的所有内容)
  • 如果你能给我更多的提示,因为我对新的 mysqli 还不完全熟悉。
【解决方案2】:

创建textarea标签时使用htmlspecialchars()函数:

<textarea><?=htmlspecialchars($_POST['Comments'])?></textarea>

【讨论】:

  • 撇号在 textarea 字段中无关紧要。并且只有 htmlspecialchars 不对撇号进行编码。您需要 ENT_QUOTES。顺便说一句:&lt;?= 是不好的做法,因为它只适用于启用短标签&lt;?php echo 更好。
  • 约翰,好点。只是我的习惯,我猜。从来没有遇到过问题。
猜你喜欢
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 2020-01-04
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多