PHP - Leer de manera correcta este csv

 
Vista:
sin imagen de perfil

Leer de manera correcta este csv

Publicado por Jordi (6 intervenciones) el 17/08/2022 11:53:08
Buenas! No consigo leer con php de manera correcta este csv delimitado por punto y coma.

Me muestra los datos desordenados no coincidiendo con sus columnas, detecta 15 columnas cuando solo son 8... he probado todos los ejemplos que he encontrado por google y en todos he obtenido el mismo resultado...

alguien podría ayudarme? he dejado el csv adjunto, gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Ivan

Leer de manera correcta este csv

Publicado por Ivan (118 intervenciones) el 17/08/2022 17:49:48
Hola,

parece que tu archivo csv está corrupto,

lo he pasado a utf-8 y me salen 11 columnas:

id; categoria; nombre; descripcion; PVP sin iva; PVD; stock; EAN13; estado; referencia; foto

Adjunto el archivo.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Leer de manera correcta este csv

Publicado por Jordi (6 intervenciones) el 17/08/2022 18:25:27
Muchas gracias!! el archivo que adjuntaste funciona a la perfección.

Ahora bien, el archivo lo obtengo a través de una url externa con file_get_contents y esta todo el proceso automatizado, sin posibilidad de meterle mano al archivo... habría manera de pasarlo a utf-8 a través de php?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Leer de manera correcta este csv

Publicado por Ivan (118 intervenciones) el 17/08/2022 20:57:33
Hola,

hay varias formas aunque puede que algún caracter no se transforme bién.

Lo primero es saber como te llega el archivo, yo lo abrí con el bloc de notas y en guardar como, me aparecía ANSI.

Esto es bastante similar a ISO-8859-1 y en PHP tienes la función utf8_encode que transforma un string ISO-8859-1 a utf-8 directamente.

Si esto no funciona puedes probar otras funciones como mb_convert_encoding o iconv, ambas codifican de un estandar especificado a otro que tu elijas.

Como ves, hay varias funciones porque este tema es un poco delicado, siempre suele haber algún caracter especial que falla, prueba las funciones, poniendo especial atención a los acentos y la ñ y elige la que mejor resultado te de.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Leer de manera correcta este csv

Publicado por Jordi (6 intervenciones) el 18/08/2022 18:00:50
Hola,

Gracias por la ayuda... he conseguido pasarlo a utf8 de esta manera:

1
2
3
4
$url = htmlspecialchars($_POST["url"]);
$data = file_get_contents($url);
$data = utf8_encode(utf8_decode($data));
file_put_contents('feed.csv', $data);

He descargado el feed.csv generado con file_put_contents y al abrirlo con bloc de notas me aparece UTF-8 y aparentemente todo con acentos y sin caracteres raros.

Sin embargo, parece que el archivo sigue estando corrupto ya que a la hora de volcarlo en php aparece todo desordenado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Leer de manera correcta este csv

Publicado por Ivan (118 intervenciones) el 18/08/2022 18:39:54
Hola,

hay un par de matices que no entiendo...

1
$data = file_get_contents($url);

Ya te da el contenido del archivo en la variable $data y puedes trabajar con él en PHP. Si no hay algún motivo concreto, no entiendo porque lo conviertes en otro archivo llamado feed.csv.

Después en la linea

1
$data = utf8_encode(utf8_decode($data));

decodificas la variable $data suponiendo que está en utf-8 y la vuelves a codificar en utf-8 ?

El objetivo principal es saber detectar en qué codificación te llega $data (supuestamente ISO-8859-1) y una vez lo sepas, convertir esa codificación a utf-8.

Lo que yo haría para trabajar con el archivo simplementes es:

1
2
3
$url = htmlspecialchars($_POST["url"]);
$data = file_get_contents($url);
$data = utf8_encode($data);

Y ya puedes trabajar con $data en PHP, si utf8_encode no funciona lo cambias por las funciones mb_convert_encoding o iconv hasta encontrar la mejor. Pero no te olvides del objetivo principal!

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar