我正在為 PHP 中的行為而苦苦掙扎,最終需要在 stackoverflow 上注冊,因為我第一次找不到任何問題的答案!:D
在我的代碼中,我從 textarea(多行)獲取以下內容:
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 總是說只有最后一行的最后一個元素是空的,盡管每個最后一個元素都是空的?
非常感謝您提前!
uj5u.com熱心網友回復:
瀏覽器正在使用回車換行符規范行分隔。因此,當您拆分換行符時,最后一部分仍然有回車符。
<?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 換行序列。(如果有誤,請更正此定義。)
注意尾隨空格可能是一個問題。小心用戶輸入。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/403879.html
標籤:
