在PHP中解析包含德文變音符號(>ä,ö,Ä,Ö,Ü)的CSV字符串時,我遇到了一些小問題。PHP str_getcsv刪除變音符號
假定以下CSV輸入字符串:
w;x;y;z
48;OSL;Oslo Stock Exchange;B
49;OTB;Österreichische Termin- und Optionenbörse;C
50;VIE;Wiener Börse;D
,並用於分析字符串,並創建其含有來自CSV字符串數據的數組中相應的PHP代碼:
public static function parseCSV($csvString) {
$rows = str_getcsv($csvString, "\n");
// Remove headers ..
$header = array_shift($rows);
$cols = str_getcsv($header, ';');
if(!$cols || count($cols)!=4) {
return null;
}
// Parse rows ..
$data = array();
foreach($rows as $row) {
$cols = str_getcsv($row, ';');
$data[] = array('w'=>$cols[0], 'x'=>$cols[1], 'y'=>$cols[2], 'z'=>$cols[3]);
}
if(count($data)>0) {
return $data;
}
return null;
}
的使用給定csv-string調用上述函數的結果爲:
Array
(
[0] => Array
(
[w] => 48
[x] => OSL
[y] => Oslo Stock Exchange
[z] => B
)
[1] => Array
(
[w] => 49
[x] => OTB
[y] => sterreichische Termin- und Optionenbörse
[z] => C
)
[2] => Array
(
[w] => 50
[x] => VIE
[y] => Wiener Börse
[z] => D
)
)
請注意,第二項缺少Ö。 僅當變音符位於列分隔符後面時纔會發生。 如果不止一個變音符號按順序排列,即「ÖÖÖsterreich」 - >「sterreich」,也會發生這種情況。 csv-string使用HTML-Form發送,因此內容得到了URL編碼。 我使用Linux服務器,在解析之前使用utf-8編碼和csv-string看起來正確。
任何想法?
無法重現。爲我工作。 http://codepad.viper-7.com/v6WIaT – Gordon
這是一個編碼問題。我嘗試使用UTF-8編碼將字符串直接放在php文件中。然後它工作。現在我使用$ csvString = utf8_encode($ csvString);解析代碼之前,它就像一個魅力。 – Javaguru
我想,我應該確保所有的表單數據都用UTF-8編碼,使用元標記和一個適當的HTTP響應頭。 – Javaguru