处理HTML表单(11)

时间:2021-09-25 22:11:30

PHP和Web表单

<?php
if(isset($_POST["name"])){//isset()函数设置变量是否设置,并且不能为空
$name = $_POST["name"];
$pass = $_POST["pass"];
printf("姓名:%s",$name);
printf("密码:%s",$pass);
}
?>
<form action="index.html" method="POST">
<p>
Name:<br/>
<input type="text" name="name"/>
</p>
<p>
Pass:<br/>
<input type="text" name="pass"/>
</p>
<input type="submit" value="提交"/>
</form>

验证表单数据

  • 清理用户输入

·转义shell参数

escapeshellarg()函数

$str = "文本";
echo escapeshellarg($str);//将字符串添加一个双引号

·转义shell元字符

escapeshellcmd()函数

$str = " # $ ; , | * ? , ~ < > ( ) { } [ ] & \\ \x0A \xFF";
escapeshellcmd($str);escapeshellcmd()函数自动转义以上字符

·将HTML转换为HTML实体

htmlentities()函数

$xiu = "&";
echo htmlentities($xiu);//浏览器源代码为&amp;

·剔除用户输入中的HTML标签

strip_tags()函数

$xiu = "<h1>h1标签</h1>,<h2>h2标签</h2>";
$xiu = strip_tags($xiu,"<h1>");//保留<h1>标签,多个标签逗号隔开
echo $xiu;//"<h1>h1标签</h1>,h2标签";
  • 利用Filter扩展验证和清理数据

filter_var()函数

Filter扩展的验证功能

FILER_VALIDAYE_BOOLEAN(布尔值)
FILER_VALIDATE_EMAIL(电子邮件地址)
FILER_VALIDATE_FLOAT(浮点数)
FILER_VALIDATE_INT(整数)
FILER_VALIDATE_IP(IP地址)
FILER_VALIDATE_REGEXP(正则表达式)
FILER_VALIDATE_URL(URL)

$email = "xiukang@qq.com";
if(filter_var($email,FILTER_VALIDATE_EMAIL)){//filter_var()函数验证数据类型
echo "成功";
}

用Filter扩展清理数据

FILTER_SANITIZE_EMAIL(电子邮件之外的字符全部删除 RFC822)
FILTER_SANITIZE_URL(URL之外的字符全部删除 RFC3986)
FILTER_SANITIZE_ENCODED(对一个字符串完成URL编码,生成与urlencode()函数所返回结果相同的输出)
FILTER_SANITIZE_MAGIC_QUOTES(使用addslaches()函数用一个反斜杠转义可能危险的字符)
FILTER_SANITIZE_NUMBER_FLOAT(删除所有导致浮点值无法由PHP识别的字符)
FILTER_SANITIZE_NUMBER_INT(删除所有导致整数值无法由PHP识别的字符)
FILTER_SANITIZE_SPECIAL_CHARS(对 ' " < >和$字符进行HTML编码,对ASCII值小于32的字符进行编码,包括制表符,退格符)
FILTER_SANITIZE_STRING(清除所有HTML标签)

$email = "xiukang@qq.com ,sear";
$email = filter_var($email,FILTER_SANITIZE_EMAIL);//删除RFC822之外所有字符
echo $email;//xiukang@qq.comsear
  • 处理多值表单组件

为了让PHP识别赋给表单的多个值,需要对表单项名添加一个中括号
PHP就会像处理数组一样处理所提交的变量

<?php
  if(isset($_POST["submit"])){
    foreach($_POST["languages"] as $language){
      $xiu = htmlentities($language);
      echo $xiu."<br/>";
    }
  }
?>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="POST">
  <input type="checkbox" name="languages[]" value="php"/>php<br/>
  <input type="checkbox" name="languages[]" value="c++"/>c++<br/>
  <input type="checkbox" name="languages[]" value="java"/>java<br/>
  <input type="checkbox" name="languages[]" value="html"/>html<br/>
  <input type="submit" name="submit" value="提交"/>
</form>