PHP修剪函数不删除空格

时间:2018-04-12 22:28:38

标签: php trim

我正在做一些有学习目的的测试。我有一个PHP脚本,我在其中使用了一些函数来查看它们的工作原理:

  • 首先,我使用了isset来确保var存在

  • 然后empty以确定var是否具有某些值

  • 最后,我使用trim删除了空格

经过一些测试后,我意识到修剪功能无法正常工作。 例如,我仍然可以写whitespaceCHARwhitespace,然后我使用strlen函数,结果得到3。我的剧本出了什么问题?

顺便说一下,我想知道这种表格验证是否可以接受,我希望避免一些sqlinjection。

提前致谢。

<span><?php echo $msg;?></span>
<form method="POST">
    <label for="name" class="white-headers">NAME</label>
    <input type="text" name="name" id="name" class="form-control">
    <label for="last_name" class="white-headers">LAST NAME</label>
    <input type="text" name="last_name" id="last_name" class="form-control">
    <input type="submit" class="btn btn-success" name="submit">
</form>


   $msg="";
  if(isset($_POST["submit"])){
   $name = $_POST["name"];
  $last_name = $_POST["last_name"];
if(!empty(trim($name)) && !empty(trim($last_name))){
    $name_len=strlen($name);
    $last_name_len=strlen($name);
    $msg="<div class='alert alert-success'>
    both fields are set and have some value name =".$name." with ".$name_len." chars and last_name =".$last_name."
    with ".$last_name_len. "chars</div>";
}
else{
    $msg="<div class='alert alert-danger'>
    both fields are set but one or both are empty name =".$name." and last_name =".$last_name."</div>";
}
}

2 个答案:

答案 0 :(得分:2)

您使用trim的唯一时间是检查修剪变量后是否还剩下任何内容:

if(!empty(trim($name)) && !empty(trim($last_name))) {

这不会影响$name$last_name

trim返回删除了空格的字符串,但不会更改作为参数给出的变量的值。如果您希望修剪这些内容以供以后在代码中使用,则需要将它们设置为修剪后的值,例如$name = trim($name)等。

在您的情况下,当您最初从$_POST设置它们时,您可能会修剪它们。

$name = trim($_POST["name"]);
$last_name = trim($_POST["last_name"]);

然后你可以检查是否还有更简单的东西:

if ($name && $last_name) {

empty不是必需的,因为您知道它们已设置,并且零长度字符串的计算结果为false。

答案 1 :(得分:-1)

documentation中所述,trim仅删除字符串开头或结尾的空格。中间的空格不受影响(使用_标记空格):

  • __string将成为string
  • string__将成为string
  • s_t_r_i_n_g将保持s_t_r_i_n_g

另外,正如Don't Panic's answer中所指出的那样,您正在检查 trim之后的字符串,而不是其返回值。

关于表单验证:如果要在应用程序中使用它们之前清理输入,只需修剪它们是不够的。有许多方法可以清理输入,每个框架都提供了一些选项,但由于你特别提到sqlinjections,我的建议是从阅读PHP的mysqli.real_escape_string

开始