因此,我正在制作这个简单的注册检查页面,用户可以在其中输入 ID,并从 CSV 文件中获取与该 ID 匹配的结果。
我遇到的问题是,由于某种原因我无法获得良好的匹配。或者,它匹配每一行。
两个比较字符串var_dump给了我这个:
string(7) "AKM" string(3) "AKM"
AKM 是此示例中的用户 ID。我尝试过utf8编码并尝试在任何地方搜索。只是不知道为什么我没有得到匹配,以及为什么var_dump报告 AKM 是 7 个字符。
知道吗?
代码如下:
$file = 'report/report.csv';
$startRow = 6;
$hms = $_GET["hms"];
$csv = array_map(function($v){return str_getcsv($v, "'t");}, file($file));
$csv = array_slice($csv, 6);
foreach($csv as $row){
if (strpos($row,$hms) !== false) {
$start = strpos($row[1], '(') - 2;
$end = strlen($row[1]) - strpos($row[1], ')');
$userID = substr($row[1],0,$start);
$userName = substr($row[1],$start+3,-2);
if($row[3] == "true"){
$passed = "Bestått (".$row[4].")";
}else{
$passed = "Ikke bestått";
}
$result = [
"id" => $userID,
"name" => $userName,
"passed" => $passed,
"datePassed" => $row[7],
"timeSpent" => $row[6],
];
var_dump($result);
}
}
这是 CSV 的外观:
响应
数据
identity_uid identity_caption完成通过结果尝试时间last_access U_5A69E39671310F44A2333C9206DAD20C xxx (名称) 100.0 真 82.6 3 00:57:09 2016/01/04 10:28:54 U_DF5A47B8E1A6E247AA338F571A8F63B1 yyy (名称) 5.0 假 0.0 3 00:04:48 2016/01/15 07:26:05
编辑:这是我现在发现的隐藏字符:
'' . "'0" . 'A' . "'0" . 'K' . "'0" . 'M' . "'0" . ''
Unicode 字符"拉丁大写字母 A"(U+0041) 的 UTF-8 编码为 0x41
。由于您已经0x0041
您的文件是 UTF-16 大端序。
如果您的应用程序使用 UTF-8,则必须进行转换。您可以使用 iconv()
或 mb_convert_encoding()
。