有一个需求,前端传过来的是图片是 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 ![]() 正则我测试正常,你再确认一下$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) 修改成这样即可。取出两侧的引号 |