通过PHP从内容处置中提取文件名

时间:2015-01-03 12:30:33

标签: php preg-match content-disposition

我需要一个正则表达式从以下字符串中提取文件名(包括文件扩展名):

attachment; filename*=UTF-8''test.rar

或者像这样

attachment; filename*=UTF-8''Epost%20-test.part01.rar

目标:

test.rar
Epost%20-test.part01.rar

我该怎么做?

注意:我正在使用preg_match进行提取

3 个答案:

答案 0 :(得分:0)

这应该适合你:

<?php

    $str = "attachment; filename*=UTF-8''test.rar";

    preg_match_all("/\w+\.\w+/", $str, $output);

    echo $output[0][0];

?>

输出:

test.rar

修改

如果每次在字符串中使用2个单引号,则可以使用以下内容获取所有内容:

<?php

    $str = "attachment; filename*=UTF-8''Epost%20-test.part01.rar";

    preg_match_all("/[^\'\']+$/", $str, $output);

    echo $output[0][0];

?>

输出:

Epost%20-test.part01.rar 

答案 1 :(得分:0)

尝试简单地使用后面的

$str = "attachment; filename*=UTF-8''test.rar";

preg_match('/(?<=\')[a-z-A-Z0-9 -,.()%]*/', $str, $matches);

print_r($matches);

DEMO https://www.regex101.com/r/yO9nQ4/1

答案 2 :(得分:-1)

你需要提供更多信息。 第一部分总是一样的吗?文件名总是在最后,就在''之后?

- 编辑 -

如果您只需要删除第一部分,则不要使用regexp

$str = "attachment; filename*=UTF-8''test.rar";

$filename = substr($str, 29);