fgetcsv () descarta caracteres com sinais diacríticos (ou seja, não ASCII) - como corrigir?
Perguntas semelhantes:
Alguns caracteres no arquivo CSV não são lidos durante o PHP fgetcsv () ,
fgetcsv () ignora caracteres especiais quando eles estão no início da linha
Meu aplicativo possui um formulário no qual os usuários podem fazer upload de um arquivo CSV (seus 5 usuários internos sempre carregam um arquivo válido - delimitado por vírgula, entre aspas, registros terminados por LF) e o arquivo é importado para um banco de dados usando PHP:
$fhandle = fopen($uploaded_file,'r');
while($row = fgetcsv($fhandle, 0, ',', '"', '\\')) {
print_r($row);
// further code not relevant as the data is already corrupt at this point
}
Por motivos que não posso alterar, os usuários estão carregando o arquivo codificado noWindows-1250
charset - uma codificação de caracteres de 8 bits e byte único.
O problema: ealguns (nem todos!) caracteres além de 127 ("ASCII estendido") são descartados emfgetcsv()
. Dados de exemplo:
"15","Ústav"
"420","Špičák"
"7","Tmaň"
torna-se
Array (
0 => 15
1 => "stav"
)
Array (
0 => 420
1 => "pičák"
)
Array (
0 => 7
1 => "Tma"
)
(Observe queč
é mantido, masÚ
caiu)
A documentação parafgetcsv diz que "desde 4.3.5 o fgetcsv () agora é binário seguro", mas parece que não é. Estou fazendo algo errado ou esta função está quebrada e devo procurar uma maneira diferente de analisar o CSV?