Неверная длина строки при чтении файла CSV с использованием PHP - PullRequest
2 голосов
/ 08 января 2020

Я читаю файл CSV, строка за строкой, используя следующий код php.

<?php
$temp=0;
$s="http://localhost/BulkMessage/Uploads/Number_Files/f7aa248e5fce52411723_CSV_7xxxxxxxx.csv";
try
{
    $file = fopen($s, 'r');
} catch (Exception $ex) {
    $_SESSION['error']="Can't read the file";
    header('Location: '.'../view_sending_rich_message.php');
}
while (($line = fgetcsv($file)) !== FALSE)
{
    echo $line[0]." Length: ".strlen($line[0])."<br>";
}

?>

Процесс чтения работает, как и ожидалось, но когда я пытаюсь напечатать длину строки, он показывает некоторые ненормальные поведение. Это несколько примеров строк из моего CSV.

  1. 71455169311
  2. 71455169112222100

Для обеих этих строк длина строки показана как 11. Для первый - правильный, а второй - 16 символов. Кажется, что для любого значения, которое имеет более 11 символов, длина строки отображается как 11 (при использовании strlen). Ниже показан сценарий из моего php для двух строк выше.

71455169311 Length: 11
7.14552E+16 Length: 11

Есть ли способ правильно определить длину строки? В чем причина такого поведения? Спасибо

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Кажется, что fgetcsv может возвращать целые числа / числа с плавающей запятой, а не только строки. Если требуются точные числа, то я не знаю, может ли fgetcsv также вернуть все как строку, но если требуется только длина строки, вы можете использовать strlen(number_format($line[0], 0, '.', '')) (при условии, что числа не имеют знаков после запятой).

0 голосов
/ 08 января 2020

Вместо strlen() попробуйте использовать mb_strlen().

...