У меня проблема с функцией 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 вместо того, чтобы просто делать explode (",", $ string) (эта функция должна уважать оболочку), но она работает так же, как и explode.
Исполняемый код: http://eval.in/17471
Параметр корпуса (третий) не имеет такого эффекта. Символ оболочки рассматривается как таковой только тогда, когда он появляется рядом с разделителем.
Чтобы получить желаемый результат, вход должен быть
#EXT-X-STREAM-INF:PROGRAM-ID=1,...,"CODECS=avc1.77.30, mp4a.40.34"
Смотрите в действии .