V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
madpecker009
V2EX  ›  PHP

关于 PHP preg_match 的问题

  •  
  •   madpecker009 · 2020-07-07 10:35:17 +08:00 · 2245 次点击
    这是一个创建于 1602 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    微信图片_20200707103133.png

    第 1 条附言  ·  2020-07-07 14:00:45 +08:00
    preg_match('/^(data:\s*image\/(\w+);base64,)/', trim($base64_image_content,'"'), $result)
    将字符串两侧的双引号去掉即可。感谢大家帮助
    NCry
        1
    NCry  
       2020-07-07 11:12:36 +08:00
    把 $base64_image_content 打印出来看看呢
    madpecker009
        2
    madpecker009  
    OP
       2020-07-07 11:16:19 +08:00
    @NCry 打印出来就是想$example 那样的。作为实参传递进去就是不可以了。。
    whoami9894
        3
    whoami9894  
       2020-07-07 11:23:09 +08:00
    什么传递实参,你是说传字符串字面量吧。图片里$example 结尾没逗号,当然匹配不到
    TORYOI
        4
    TORYOI  
       2020-07-07 11:32:01 +08:00   ❤️ 1
    正则我测试正常,你再确认一下$base64_image_content 的内容,var_dump 看看,看有没有空格或者转码之类的
    mitu9527
        5
    mitu9527  
       2020-07-07 11:36:24 +08:00
    扣掉输出和返回,一共 5 行代码都不到,有这么“无解”么,单步调试一下,眼睛瞪大点。自己解决后把帖子给沉了吧。
    KasonPasser
        6
    KasonPasser  
       2020-07-07 11:42:43 +08:00
    这是正则的问题,与语言关系不大。
    Xusually
        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)
    zhyt0520
        8
    zhyt0520  
       2020-07-07 12:20:09 +08:00 via Android
    规则最后有个逗号?
    faraone
        9
    faraone  
       2020-07-07 13:57:19 +08:00
    if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $img, $rt)) {
    $mime = $rt[2];
    }
    madpecker009
        10
    madpecker009  
    OP
       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)
    修改成这样即可。取出两侧的引号
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1309 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:50 · PVG 01:50 · LAX 09:50 · JFK 12:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.