Me encontré con un pequeño problema al analizar CSV-Strings que contienen diéresis (-> ä, ö, ü, Ö, Ü) en PHP.PHP str_getcsv elimina diéresis
Supongamos la siguiente cadena de entrada 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
Y el código PHP adecuada que se utiliza para analizar la cadena y crear una matriz que contiene los datos de la 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;
}
El resultado de llamar a la función anterior con los resultados de la serie csv dados en:
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
)
)
Tenga en cuenta que a la segunda entrada le falta Ö. Esto solo ocurre si la diéresis se coloca directamente después del carácter de separador de columna. También sucede, si más de una diéresis se coloca en secuencia, es decir "ÖÖÖsterreich" -> "sterreich". La cadena csv se envía utilizando un formulario HTML, por lo tanto, el contenido recibe codificación URL. Utilizo un servidor Linux, con codificación utf-8 y la cadena csv parece correcta antes de analizar.
¿Alguna idea?
no puede reproducirse. funciona para mi. http://codepad.viper-7.com/v6WIaT – Gordon
Es un problema de codificación. Traté de colocar la cadena directamente en el archivo php, usando la codificación UTF-8. Entonces funcionó. Ahora uso $ csvString = utf8_encode ($ csvString); antes del código de análisis, y funciona como un amuleto. – Javaguru
Supongo que debería asegurarme de que todos los datos de formulario estén codificados con UTF-8, utilizando la etiqueta meta y un encabezado de respuesta HTTP apropiado. – Javaguru