关于 PHP preg_match 的问题

2020-07-07 10:35:17 +08:00
 madpecker009

有一个需求,前端传过来的是图片是 base64 编码过的,我在后端需要进行接码,存储文件,然后将文件路径写入到 mysql 中。现在碰到一个问题。preg_match()就是匹配不到 base64 文件中的图片格式。实在是无解了。 后端是 php thinkphp5.1 php7.2.1

2246 次点击
所在节点    PHP
10 条回复
NCry
2020-07-07 11:12:36 +08:00
把 $base64_image_content 打印出来看看呢
madpecker009
2020-07-07 11:16:19 +08:00
@NCry 打印出来就是想$example 那样的。作为实参传递进去就是不可以了。。
whoami9894
2020-07-07 11:23:09 +08:00
什么传递实参,你是说传字符串字面量吧。图片里$example 结尾没逗号,当然匹配不到
TORYOI
2020-07-07 11:32:01 +08:00
正则我测试正常,你再确认一下$base64_image_content 的内容,var_dump 看看,看有没有空格或者转码之类的
mitu9527
2020-07-07 11:36:24 +08:00
扣掉输出和返回,一共 5 行代码都不到,有这么“无解”么,单步调试一下,眼睛瞪大点。自己解决后把帖子给沉了吧。
KasonPasser
2020-07-07 11:42:43 +08:00
这是正则的问题,与语言关系不大。
Xusually
2020-07-07 12:03:52 +08:00
preg_match('/^(data:\s*image\/(\w+);base64,)/',$base64_image_content,$result)

-->

preg_match('/^(data:\s*image\/(\w+);base64)/',$base64_image_content,$result)
zhyt0520
2020-07-07 12:20:09 +08:00
规则最后有个逗号?
faraone
2020-07-07 13:57:19 +08:00
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $img, $rt)) {
$mime = $rt[2];
}
madpecker009
2020-07-07 14:01:55 +08:00
@faraone
@zhyt0520
@Xusually
@KasonPasser
@KasonPasser
@mitu9527
@mitu9527
@TORYOI
@whoami9894
@whoami9894
@NCry
preg_match('/^(data:\s*image\/(\w+);base64,)/', trim($base64_image_content,'"'), $result)
修改成这样即可。取出两侧的引号

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/687807

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX