PHP: 爆炸字符串 => 最后一个元素为空,但未被识别为空
PHP: Exploding string => last element is empty, but not recognized as empty
我正在为 PHP 中的行为而苦苦挣扎,最终需要在 Whosebug 上注册,因为我第一次找不到问题的任何答案! :D
在我的代码中,我从文本区域(多行)获取以下内容:
10001;11;;;1;3;
10002;11;;;1;3;
10003;11;;;1;3;
我首先用explode("\n", $string);
展开几行。
二、我把每一行的元素都爆出来:explode(";", $string[0]);
键6内容为空,但PHP只识别最后一行最后一个元素为空:
用
展开行
explode("\n", $string);
Array ( [0] => 10001;11;;;1;3; [1] => 10002;11;;;1;3; [2] => 10003;11;;;1;3; )
用
展开第一行
explode(";", $string[0]);
Array ( [0] => 10001 [1] => 11 [2] => [3] => [4] => 1 [5] => 3 [6] => )
第一行的最后一个元素是否为空?
( if(empty($line1[6]) )
没有
爆炸第二行
explode(";", $string[1]);
Array ( [0] => 10002 [1] => 11 [2] => [3] => [4] => 1 [5] => 3 [6] => )
第二行的最后一个元素是否为空?
( if(empty($line2[6]) )
没有
爆炸第三行
explode(";", $string[2]);
Array ( [0] => 10003 [1] => 11 [2] => [3] => [4] => 1 [5] => 3 [6] => )
第三行最后一个元素是否为空?
( if(empty($line3[6]) )
是
谁能告诉我,为什么 PHP 总是说只有最后一行的最后一个元素是空的,尽管每个最后一个元素都是空的?
非常感谢您!
浏览器正在使用回车 return 换行规范化行分隔。因此,当您在换行符上拆分时,最后一部分仍然有一个回车 return。
<?php
$data = $_POST['data'];
$lines = explode("\n", $data);
//$lines = preg_split('@\R@', $data);
foreach($lines as $line) {
$parts = explode(';', $line);
var_dump(empty($parts[6]));
}
?>
<form method='POST'>
<textarea name='data'>10001;11;;;1;3;
10002;11;;;1;3;
10003;11;;;1;3;</textarea>
<input type='submit'>
</form>
输出(没有表单提交时的表单代码):
bool(false)
bool(false)
bool(true)
将爆炸线换成上面的 preg_split,输出为:
bool(true)
bool(true)
bool(true)
\R 转义序列匹配任何 Unicode 换行序列。 (定义有误请指正。)
注意尾随 space 可能是个问题。小心用户输入。
我正在为 PHP 中的行为而苦苦挣扎,最终需要在 Whosebug 上注册,因为我第一次找不到问题的任何答案! :D
在我的代码中,我从文本区域(多行)获取以下内容:
10001;11;;;1;3;
10002;11;;;1;3;
10003;11;;;1;3;
我首先用explode("\n", $string);
展开几行。
二、我把每一行的元素都爆出来:explode(";", $string[0]);
键6内容为空,但PHP只识别最后一行最后一个元素为空:
用
展开行explode("\n", $string);
Array ( [0] => 10001;11;;;1;3; [1] => 10002;11;;;1;3; [2] => 10003;11;;;1;3; )
用
展开第一行explode(";", $string[0]);
Array ( [0] => 10001 [1] => 11 [2] => [3] => [4] => 1 [5] => 3 [6] => )
第一行的最后一个元素是否为空?
( if(empty($line1[6]) )
没有
爆炸第二行
explode(";", $string[1]);
Array ( [0] => 10002 [1] => 11 [2] => [3] => [4] => 1 [5] => 3 [6] => )
第二行的最后一个元素是否为空?
( if(empty($line2[6]) )
没有
爆炸第三行
explode(";", $string[2]);
Array ( [0] => 10003 [1] => 11 [2] => [3] => [4] => 1 [5] => 3 [6] => )
第三行最后一个元素是否为空?
( if(empty($line3[6]) )
是
谁能告诉我,为什么 PHP 总是说只有最后一行的最后一个元素是空的,尽管每个最后一个元素都是空的?
非常感谢您!
浏览器正在使用回车 return 换行规范化行分隔。因此,当您在换行符上拆分时,最后一部分仍然有一个回车 return。
<?php
$data = $_POST['data'];
$lines = explode("\n", $data);
//$lines = preg_split('@\R@', $data);
foreach($lines as $line) {
$parts = explode(';', $line);
var_dump(empty($parts[6]));
}
?>
<form method='POST'>
<textarea name='data'>10001;11;;;1;3;
10002;11;;;1;3;
10003;11;;;1;3;</textarea>
<input type='submit'>
</form>
输出(没有表单提交时的表单代码):
bool(false)
bool(false)
bool(true)
将爆炸线换成上面的 preg_split,输出为:
bool(true)
bool(true)
bool(true)
\R 转义序列匹配任何 Unicode 换行序列。 (定义有误请指正。)
注意尾随 space 可能是个问题。小心用户输入。