如何正确地将带引号的字符串保存到数据库中以便进一步显示


How to properly save string with quotation marks to database for further displaying?

我想在数据库中保存一些表单数据。形式:

echo '<form action="post" method="'.$_SERVER['PHP_SELF'].'">
<input type="text" name="first_name" value="htmlspecialchars($_POST['first_name']).' />
<input type="text" name="last_name" value="htmlspecialchars($_POST['last_name']).' />
<input type="submit" name="submit" />
</form>';

若某个输入为空,它会刷新到同一页,并在顶部显示错误,说明填充输入。

问题是,当我只将一个输入填充为值aaa"aaa,而另一个保存为空时,我会提交。然后我会收到一个错误,说填充另一个输入,填充的值从aaa"aaa变为aaa&quot;啊。

因此,当我在数据库中保存数据时,有些数据是转义的,有些数据不是。

我想使用htmlspecialchars_decode,但如果我要键入aaa&quot;aaa当我想按原样保存时,它会将其转换为aaa"aaa"(aaa&aaa)。

我能做什么?

谢谢!

我建议您使用Javascript验证来检查每个字段,如果一切正常,则将其保存在数据库中。

如果您需要对用户数据进行验证,那么您当然需要在前端(javascript)和后端(出于安全原因)进行验证。

无论如何,首先我在php代码中看到错误。没有适当的串联符号和引号。正确的代码应该是:

echo '<form action="post" method="'.$_SERVER['PHP_SELF'].'">
<input type="text" name="first_name" value="'.htmlspecialchars($_POST['first_name']).'" />
<input type="text" name="last_name" value="'.htmlspecialchars($_POST['last_name']).'" />
<input type="submit" name="submit" />
</form>';

如果你真的想显示用户插入的引号,作为变体,你可以使用html_entity_decode($your_variable_here);

$orig = "I'll '"walk'" the <b>dog</b> now";
$a = htmlspecialchars($orig);
$b = html_entity_decode($a);
echo $a; // I'll &quot;walk&quot; the &lt;b&gt;dog&lt;/b&gt; now
echo $b; // I'll "walk" the <b>dog</b> now

更多信息请点击此处