PHP - 来自 csv 的字符串,报告更多字符


PHP - string from csv reporting more characters

因此,我正在制作这个简单的注册检查页面,用户可以在其中输入 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()