2

PHP の str_getcsv 関数に問題があります。

私はこのコードを持っています:

<?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 のエンクロージャーを無視しており、その情報も分割しています。その理由(その関数はエンクロージャーを尊重する必要があります)のために正確にexplode( "、"、$ string)を実行する代わりにstr_getcsvを使用していますが、explodeと同じように機能しています。

実行中のコード: http://eval.in/17471

4

1 に答える 1

4

エンクロージャー(3 番目) パラメーターには、その効果はまったくありません。囲み文字は、区切り文字の隣にある場合にのみ、そのように扱われます。

目的の出力を得るには、入力を次のようにする必要があります。

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

実際に見てください

于 2013-04-24T14:52:51.553 に答える