Ada*_*dam 5 html php mysql forms validation
我正在为我的老板建立一个PHP内部网.一个简单的客户,订单,报价系统.它将被拒绝从互联网访问,仅供3人使用.我不太关心安全性,因为我在验证时.Javascript在所有计算机上都是禁用的.
我遇到的问题是:
:;[]"'
.我的问题是:
如果员工在步骤1中反复输入数据,则每次将htmlspecialchars()应用于数据时,他们将在步骤1和4之间继续移动.
So that:- &
becomes:- &
becomes:- &
becomes:- &
Run Code Online (Sandbox Code Playgroud)
等等..
如何阻止htmlspecialchars()多次应用于已清理的数据?
谢谢,亚当
串用htmlspecialchars(字符串$串[摘要$ quote_style = ENT_COMPAT [,字符串$字符集[, 布尔$ double_encode =真 ]]])
该$double_encode
选项应该是您正在寻找的.
在正确设置的数据流,但是,这不应该是一种可能性可言,除非有数据从用户或可以或不可以已经包含HTML编码字符第三方服务的传入.(不,我还没有建在我的职业生涯的几个不正确设置的数据流.但是,这就是为什么我知道为什么它如此重要他们是干净和明确的.:-)
htmlspecialchars
您应该只在 HTML 输出中使用,而不是在其他地方使用。
<input name="var" value="<?php echo htmlspecialchars($var)?>">
Run Code Online (Sandbox Code Playgroud)
例如,如果$var
包含一个 & 符号,那么在 HTML 中它将输出编码值:
<input name="var" value="this&that">
Run Code Online (Sandbox Code Playgroud)
但是,用户只能this&that
在输入字段中看到,并且在提交后,$_GET['var']
将是this&that
,而不是编码版本。
在 PHP 方面,如果启用了魔术引号,您唯一可能想做的就是删除斜杠:
if (get_magic_quotes_gpc())
$var = stripslashes($_POST['var']);
else
$var = $_POST['var'];
Run Code Online (Sandbox Code Playgroud)
从那里您应该将原始数据存储在数据库中,而不是 HTML 编码的版本。为了避免 SQL 注入,mysql_real_escape_string
如果您使用的是普通 mysql 函数,请使用它,或者使用PDO。
You*_*nse -4
So that:- &
becomes:- &
becomes:- &amp;
becomes:- &amp;amp;
Run Code Online (Sandbox Code Playgroud)
你完全错了。尝试一下看看
<form>
<input name="a" value="<?=htmlspecialchars($_GET["a"])?>">
<input type=submit>
</form>
Run Code Online (Sandbox Code Playgroud)