首页 > 解决方案 > 通过正则表达式检查图像数据是否是 urlencoded jpeg

问题描述

我有以下课程:

namespace MyApp\ImageGenerators

class ImageGen
{

  public function checkIfImageUrlEncodedJpeg($imageData)
  {
     return preg_match($someregex,$imageData);
  }

}

如您所见,我想将$someregex变量的值设置为有效的 pcre 正则表达式,它将验证提供的数据是否为 ​​urlencoded base64Image。

标签: phpregeximagepcre

解决方案


在我的代码中,我使用了以下正则表达式:

/^data:image\/jpeg;base64,\s*[A-Za-z0-9\+\/]+=*$/i

如您所见,urlencoded 数据具有以下部分:

data:^mime^;base64,^data_encoded_as_base64^

其中 ^mime^ 是编码为 base64 格式的数据的 mime 到^data_encoded_as_base64^字段中。请记住,上面提到的方法只是将数据“看起来很整齐”作为有效的 urlencoded jpeg 图像进行检查。

在大多数情况下,我建议尤其是在这些数据是用户提供或 api 提供的情况下,通过解码实际上是 jpeg 图像的 base64 编码部分来检查。

为了简短起见,您的代码将如下所示:

 namespace MyApp\ImageGenerators

class ImageGen
{

  public function checkIfImageUrlEncodedJpeg($imageData)
  {
     return preg_match('/^data:image\/jpeg;base64,\s*[A-Za-z0-9\+\/]+=*$/i',$imageData);
  }
}

推荐阅读