PHP一次从字符串中删除几个东西

时间:2015-08-24 15:25:49

标签: php string substr strpos

我有一个这样的字符串输入到我的数据库中,在存储之前我无法格式化:

image/upload/v1440427262/hglz466d8mm1pazysaoh.jpg#32e2e9a111a4f9f4aa01dbad2ca2aa403c994d28

我想要使用的字符串中唯一的部分是:

hglz466d8mm1pazysaoh.jpg

我正在尝试使用strpos删除多余的数据。

到目前为止,我已成功删除了包含标签

之后的所有内容

($ data是原始字符串):

$dataclean = substr($data, 0, strpos($data, "#"));

这与$ dataclean返回时预期的效果如下:

image/upload/v1440427262/hglz466d8mm1pazysaoh.jpg

但我不知道如何删除剩余的多余数据:

image/upload/v1440427262/

此外,这一切都可以在一次点击中完成,还是必须分成几个操作?

5 个答案:

答案 0 :(得分:6)

使用basename

$dataclean = basename(substr($data, 0, strpos($data, "#")));

答案 1 :(得分:1)

如问题中所述,首先使用

删除#之后的值

$link = substr($data, 0, strpos($data, "#"));

然后使用basename()函数从URL访问文件名。

例如,

    $link = "http://example.com/folderPath/filename.php";
    echo basename($link);  // It will return filename.php

答案 2 :(得分:1)

如果basename()不起作用,我会用正斜杠来爆炸字符串。

$data = 'image/upload/v1440427262/hglz466d8mm1pazysaoh.jpg#32e2e9a111a4f9f4aa01dbad2ca2aa403c994d28';
$pieces = explode("/", $data);

$dataclean = substr($pieces[3], 0, strpos($data, "#"));

答案 3 :(得分:0)

substr + strpos没有错,但看起来您的字符串是一个网址,因此您可以在使用basename之前使用parse_url隔离路径。只是另一种选择FYI。

basename(parse_url($yourString, PHP_URL_PATH));

答案 4 :(得分:0)

您可以使用正则表达式函数:

preg_match("/[a-z0-9]+\.[a-z]{3}/i", $input_line, $output_array);

Try the code