str_getcsv неправильно анализирует данные

У меня проблема с функцией str_getcsv для PHP.

У меня есть этот код:

<?php
$string = '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=714000,RESOLUTION=640x480,CODECS="avc1.77.30, mp4a.40.34"';

$array = str_getcsv($string, ",", '"');

print_r($array);

Что должно вернуться:

Array
(
    [0] => #EXT-X-STREAM-INF:PROGRAM-ID=1
    [1] => BANDWIDTH=714000
    [2] => RESOLUTION=640x480
    [3] => CODECS=avc1.77.30, mp4a.40.34
)

Но вместо этого он возвращает:

Array
(
    [0] => #EXT-X-STREAM-INF:PROGRAM-ID=1
    [1] => BANDWIDTH=714000
    [2] => RESOLUTION=640x480
    [3] => CODECS="avc1.77.30
    [4] =>  mp4a.40.34"
)

Потому что он игнорирует вложение последнего параметра: CODECS и разделяет также эту информацию. Я использую str_getcsv вместо простого взрыва(",", $string) именно по этой причине (эта функция должна учитывать вложение), но она работает так же, как и взрыв.

Выполняемый код: http://eval.in/17471


person Cito    schedule 24.04.2013    source источник


Ответы (1)


Параметр enclosure (третий) не имеет такого эффекта. Символ включения рассматривается как таковой только тогда, когда он появляется рядом с разделителем.

Чтобы получить желаемый результат, ввод должен быть

#EXT-X-STREAM-INF:PROGRAM-ID=1,...,"CODECS=avc1.77.30, mp4a.40.34"

Посмотрите в действии.

person Jon    schedule 24.04.2013
comment
Спасибо за ответ. Я получаю эту информацию из файла m3u8. Есть ли простой способ получить информацию, которую я хотел? - person Cito; 24.04.2013
comment
@AbrahamSustaita: str_replace('CODECS="', '"CODECS=', $line) отпустил бы тебя домой пораньше. Нечисто как черт, но с практичностью не поспоришь. - person Jon; 24.04.2013