PHP Trim 函数不删除空格
PHP Trim function not removing whitespaces
我正在做一些以学习为目的的测试。我有一个 PHP 脚本,我在其中使用了一些函数来查看它们是如何工作的:
首先我使用 isset 来确保 var 存在
然后 empty
以确保 var 是否具有某些值
最后我用 trim
删除了空格
经过一些测试,我发现 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
我正在做一些以学习为目的的测试。我有一个 PHP 脚本,我在其中使用了一些函数来查看它们是如何工作的:
首先我使用 isset 来确保 var 存在
然后
empty
以确保 var 是否具有某些值最后我用
trim
删除了空格
经过一些测试,我发现 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