如何正确保存带引号的字符串到数据库进一步显示?

时间:2013-12-01 00:48:02

标签: php html database forms security

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

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&amp; QUOT; AAA

因此,当我将数据保存在数据库中时,某些数据会被转义而某些数据不会被转义。

我想使用htmlspecialchars_decode,但是如果我输入aaa&amp; quot; aaa它会将它转换为aaa“aaa,当我想要保存它时(aaa&amp; quot; aaa)。

我能做什么?

谢谢!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果您需要验证用户数据,当然您需要在前端(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

更多信息here