PHP - 使用两个参数拆分字符串

时间:2011-08-15 23:07:24

标签: php regex explode

我正在尝试在PHP中拆分从$ _GET收到的字符串,但是我被卡住了,因为它不仅仅是explode()函数会处理 - 或者我认为。

如果我收到的字符串包含引号(“”),我希望拆分(按空格)以保持引号中的东西不变。例如。像'Foo bar“Bar 2”'这样的结果会被分成1 - > Foo; 2 - >酒吧3 - >酒吧2。

我看过explode(),preg_split和类似的东西,但我不明白如何用空格分割更大的字符串,同时保留引号中的完整子串。

感谢。

1 个答案:

答案 0 :(得分:6)

这是以空格作为分隔符的CSV文件的定义。使用CSV解析功能str_getcsv

$str = 'Foo bar "Bar 2"';
$arr = str_getcsv($str, ' ');
print_r($arr);

输出:

Array
(
    [0] => Foo
    [1] => bar
    [2] => Bar 2
)

对于PHP< 5.3,来自PHP手册的评论:

if (!function_exists('str_getcsv')) {
    function str_getcsv($input, $delimiter = ",", $enclosure = '"', $escape = "\\") {
        $fiveMBs = 5 * 1024 * 1024;
        $fp = fopen("php://temp/maxmemory:$fiveMBs", 'r+');
        fputs($fp, $input);
        rewind($fp);

        $data = fgetcsv($fp, 1000, $delimiter, $enclosure); //  $escape only got added in 5.3.0

        fclose($fp);
        return $data;
    }
}