2016-01-20 25 views
0

所以,我製作了這個簡單的註冊檢查頁面,用戶可以輸入一個ID,並從CSV文件中獲得與該ID匹配的結果。PHP - 來自csv的字符串報告更多字符

問題我有,是由於某種原因,我不能得到一個好匹配。或者,它匹配每一行。在兩個比較字符串

的var_dump給了我這樣的:

string(7) "AKM" string(3) "AKM" 

AKM在這個例子中,用戶ID。我試過utf8編碼,並嘗試搜索eeverywhere。只是不知道爲什麼我沒有得到一個匹配,以及爲什麼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 true 82.6 3 00: 57:09 2016年1月4日10點28分54秒 U_DF5A47B8E1A6E247AA338F571A8F63B1 YYY(名稱)5.0假0.0 3○時04分48秒2016年1月15日7時26分05秒

編輯:這是隱藏字符我現在發現:

'' . "\0" . 'A' . "\0" . 'K' . "\0" . 'M' . "\0" . '' 
+0

我的解決方案是這樣的:[鏈接](http://stackoverflow.com/a/31210732) – user2113177

回答

2

UTF-8編碼Unicode Character 'LATIN CAPITAL LETTER A' (U+0041)0x41。既然你有0x0041你的文件是UTF-16 Big Endian。

如果您的應用程序使用UTF-8,則必須進行轉換。您可以使用iconv()mb_convert_encoding()

+0

謝謝:)我不得不添加一個新的功能,以顯示這些\ 0字符。 –

+0

那麼,我會說[已存在](http://php.net/bin2hex);-) –

+0

是的,它確實存在。但我看不到它:)我現在使用它:$ userID = str_replace(「\ 0」,「」,$ userID);但我應該改變整個導入CSV的編碼。但它存儲在一個數組中,我不需要全部通過並更改編碼。 謝謝! –