2015-03-28 3 views
0

У меня странная проблема с анализом данных из файла с файлом_get_contents.Анализ данных из файла с помощью PHP

Содержимое файла: 0,0,0 (есть 3 случайных чисел в диапазоне от 0 до 255, разделенных запятой)

$s = file_get_contents($this->filePath); 
var_dump(trim($s)); 
$rgb = explode(',', trim($s)); 
var_dump($rgb); 

Выход:

string(8) "0,0,0" 
array(3) { 
    [0]=> 
    string(4) "0" 
    [1]=> 
    string(1) "0" 
    [2]=> 
    string(1) "0" 
} 

И если я пытаюсь преобразования в целое число:

string(14) "255,128,255" 
array(3) { 
    [0]=> 
    string(6) "255" 
    [1]=> 
    string(3) "128" 
    [2]=> 
    string(3) "255" 
} 

echo((int)$rgb[0]); // -> 0 
echo((int)$rgb[1]); // -> 128 
echo((int)$rgb[2]); // -> 255 

файл в кодировке UTF-8, и я думаю, что есть некоторые пробелы символ в разобранном строке, но я не знаю, что мне делать с этим, потому что простая обрезка не работает.

Спасибо за идеи!

+1

Я думаю, что это проблема с отметкой байтового заказа в начале вашего файла. Попробуйте установить 'mb_internal_encoding ('UTF-8');' перед вызовом 'file_get_contents' и посмотреть, поможет ли это. –

ответ

1

Ваш файл начинается с отметки байтового заказа (BOM). Длина обеих строк является бесплатной, так как они слишком длинны 3 байта.

В идеале вы должны попытаться устранить эту проблему в источнике, сохранив файл без спецификации в начале. Однако, если это не вариант, вы можете лишить его вручную из вашей строки:

$str = file_get_contents($this->filePath); 
$bom = pack("CCC", 0xef, 0xbb, 0xbf); 
if (strncmp($str, $bom, 3) === 0) { 
    $str = substr($str, 3); 
} 

Я использовал слегка модифицированную версию некоторого кода, взятого из this blog post. В принципе, он сравнивает первые 3 байта строки с спецификацией и удаляет их из строки, если это необходимо.

+0

Спасибо за помощь :) Работает для меня :) – sczdavos

Смежные вопросы