有一个需求,前端传过来的是图片是 base64 编码过的,我在后端需要进行接码,存储文件,然后将文件路径写入到 mysql 中。现在碰到一个问题。preg_match()
就是匹配不到 base64 文件中的图片格式。实在是无解了。
后端是 php thinkphp5.1 php7.2.1
1
NCry 2020-07-07 11:12:36 +08:00
把 $base64_image_content 打印出来看看呢
|
2
madpecker009 OP @NCry 打印出来就是想$example 那样的。作为实参传递进去就是不可以了。。
|
3
whoami9894 2020-07-07 11:23:09 +08:00
什么传递实参,你是说传字符串字面量吧。图片里$example 结尾没逗号,当然匹配不到
|
4
TORYOI 2020-07-07 11:32:01 +08:00 1
正则我测试正常,你再确认一下$base64_image_content 的内容,var_dump 看看,看有没有空格或者转码之类的
|
5
mitu9527 2020-07-07 11:36:24 +08:00
扣掉输出和返回,一共 5 行代码都不到,有这么“无解”么,单步调试一下,眼睛瞪大点。自己解决后把帖子给沉了吧。
|
6
KasonPasser 2020-07-07 11:42:43 +08:00
这是正则的问题,与语言关系不大。
|
7
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) |
8
zhyt0520 2020-07-07 12:20:09 +08:00 via Android
规则最后有个逗号?
|
9
faraone 2020-07-07 13:57:19 +08:00
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $img, $rt)) {
$mime = $rt[2]; } |
10
madpecker009 OP @faraone
@zhyt0520 @Xusually @KasonPasser @KasonPasser @mitu9527 @mitu9527 @TORYOI @whoami9894 @whoami9894 @NCry preg_match('/^(data:\s*image\/(\w+);base64,)/', trim($base64_image_content,'"'), $result) 修改成这样即可。取出两侧的引号 |