PHP 一次从字符串中删除多个内容

PHP removing several things from a string at once

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

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/

另外,这个是不是可以一次完成,还是需要拆分成几个操作?

使用basename:

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

如问题中所述,首先使用

删除 # 之后的值

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

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

例如,

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

如果 basename() 不起作用,我会用正斜杠分解字符串。

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

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

substr + strpos 没有问题,但看起来您的字符串是 URL,因此您可以在使用 basename 之前使用 parse_url 来隔离路径。仅供参考。

basename(parse_url($yourString, PHP_URL_PATH));

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

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

Try the code