PHP一次从字符串中删除多个内容
我将这样的字符串输入到数据库中,在存储之前无法格式化:PHP一次从字符串中删除多个内容,php,string,substr,strpos,Php,String,Substr,Strpos,我将这样的字符串输入到数据库中,在存储之前无法格式化: image/upload/v1440427262/hglz466d8mm1pazysaoh.jpg#32e2e9a111a4f9f4aa01dbad2ca2aa403c994d28 我要使用的字符串的唯一部分是: hglz466d8mm1pazysaoh.jpg 我正在尝试使用strpos删除多余的数据 到目前为止,我已经成功地删除了hashtag之后的所有内容 ($data是原始字符串): 这与$dataclean返回时的预期效果一样
image/upload/v1440427262/hglz466d8mm1pazysaoh.jpg#32e2e9a111a4f9f4aa01dbad2ca2aa403c994d28
我要使用的字符串的唯一部分是:
hglz466d8mm1pazysaoh.jpg
我正在尝试使用strpos删除多余的数据
到目前为止,我已经成功地删除了hashtag之后的所有内容
($data是原始字符串):
这与$dataclean返回时的预期效果一样:
image/upload/v1440427262/hglz466d8mm1pazysaoh.jpg
但我不知道如何删除剩余的多余数据:
image/upload/v1440427262/
此外,这一切可以在一次点击中完成,还是必须分为几个操作?使用:
如问题中所述,首先使用删除
#
之后的值
$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
之前使用它来隔离路径。仅供参考,这只是另一个选择
basename(parse_url($yourString, PHP_URL_PATH));
您可以使用正则表达式函数:
preg_match("/[a-z0-9]+\.[a-z]{3}/i", $input_line, $output_array);
对于最后一部分,可以使用$temp=explode(“/”,$dataclean)$图像=$temp[3];或者使用正则表达式:$dataclean=preg_replace(“~.*/|#.*~”,“,$data)代码>我选择了basename/strpos方法,因为我读到它比regex快,并且我正在使用此函数更新新创建的数据库条目。格兰特说:“我不知道这句话有多正确,也不知道我所做的是不是一件特别安全的事情,但它似乎起了作用。”。对于10k循环,最慢的是正则表达式(pcre_研究标志比没有快一点),最快的是纯爆炸:$dataclean=explode(“#”,end(explode(“/”,$data))[0]代码>几乎一样快:所选答案:]这也会在散列之后返回数据。您需要在basename
函数中包含删除它的内容。@ride_85027:我只是在示例中提到了这个概念。问题已经包含了使用substr
删除
之后的值的解决方案。为什么basename
不起作用?这应该是substr($pieces[count($pieces)-1],0,strpos($data,“#”)
否则,每次数组索引到gethanks时都需要知道添加代码的细节。我相信basename是这个问题的最佳答案。我不知道为什么它不起作用,但如果它不起作用,这是另一种可能做你需要的事情的方式。
basename(parse_url($yourString, PHP_URL_PATH));
preg_match("/[a-z0-9]+\.[a-z]{3}/i", $input_line, $output_array);