Tôi gặp phải một vấn đề nhỏ khi phân tích cú pháp CSV-Strings chứa các dấu âm tiếng Đức (-> ä, ö, ü, Ä, Ö, Ü) trong PHP.PHP str_getcsv loại bỏ umlauts
Giả sử chuỗi sau csv đầu vào:
w;x;y;z
48;OSL;Oslo Stock Exchange;B
49;OTB;Österreichische Termin- und Optionenbörse;C
50;VIE;Wiener Börse;D
Và mã PHP thích hợp sử dụng để phân tích chuỗi và tạo ra một mảng chứa các dữ liệu từ csv-String:
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;
}
Các kết quả của việc gọi hàm trên với kết quả csv-string đã cho:
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
)
)
Lưu ý rằng mục nhập thứ hai bị thiếu Ö. Điều này chỉ xảy ra, nếu âm sắc được đặt trực tiếp sau ký tự dấu tách cột. Điều này cũng xảy ra, nếu nhiều hơn một âm sắc là các địa điểm theo thứ tự, tức là "ÖÖÖsterreich" -> "sterreich". Chuỗi csv được gửi bằng cách sử dụng Biểu mẫu HTML, do đó nội dung được mã hóa URL. Tôi sử dụng máy chủ Linux, với mã hóa utf-8 và chuỗi csv có vẻ chính xác trước khi phân tích cú pháp.
Bất kỳ ý tưởng nào?
không thể tái tạo. làm việc cho tôi. http://codepad.viper-7.com/v6WIaT – Gordon
Đây là sự cố mã hóa. Tôi đã cố gắng để đặt chuỗi trực tiếp trong tập tin php, sử dụng mã hóa UTF-8. Sau đó, nó hoạt động. Bây giờ tôi sử dụng $ csvString = utf8_encode ($ csvString); trước mã phân tích cú pháp và nó hoạt động như một nét duyên dáng. – Javaguru
Tôi đoán, tôi phải đảm bảo rằng tất cả dữ liệu biểu mẫu được mã hóa bằng UTF-8, sử dụng thẻ meta và một Tiêu đề phản hồi HTTP thích hợp. – Javaguru