PHP Trim 函数不删除空格

PHP Trim function not removing whitespaces

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

经过一些测试,我发现 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>";
}
}

你唯一使用 trim 的时候是检查 trim 变量之后是否还剩下任何东西:

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

这不影响 $name$last_name

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

在你的情况下,当你最初从 $_POST 设置它们时,你可能 trim 它们。

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

那你可以更简单的查看一下有没有剩余:

if ($name && $last_name) {

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

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

  • __string 会变成 string
  • string__ 会变成 string
  • s_t_r_i_n_g 将保持 s_t_r_i_n_g

此外,正如 中指出的,您正在检查 之后 trim 的字符串,而不是它的 return 值。

关于表单验证:如果您想在应用程序中使用之前清理您的输入,仅仅修剪它们是不够的。有很多方法可以清理输入,每个框架都提供一些选项,但由于您专门谈到了 sqlinjections,我的建议是先阅读 PHP 的 mysqli.real_escape_string