我正在使用前端Javascript文本编辑器,以html格式提交数据,还将所有图像转换为base64编码格式。
以下函数将解析$ _POST super global,用于html内容并将编码图像存储在images文件夹中,并附带相应的扩展名。
$html = preg_replace_callback("/src=\"data:([^\"]+)\"/", function ($matches) {
list($contentType, $encContent) = explode(';', $matches[1]);
if (substr($encContent, 0, 6) != 'base64') {
return $matches[0];
}
$imgBase64 = substr($encContent, 6);
$imgFilename = md5($imgBase64); // Get unique filename
$imgExt = '';
switch($contentType) {
case 'image/jpeg': $imgExt = 'jpg'; break;
case 'image/gif': $imgExt = 'gif'; break;
case 'image/png': $imgExt = 'png'; break;
default: return $matches[0];
}
// Here is where I'm able to echo image names with thier extentions.
echo $imgFilename . '.' . $imgExt;
$imgPath = 'zendesk-images/'.$imgFilename.'.'.$imgExt;
// Save the file to disk if it doesn't exist
if (!file_exists($imgPath)) {
$imgDecoded = base64_decode($imgBase64);
$fp = fopen($imgPath, 'w');
if (!$fp) {
return $matches[0];
}
fwrite($fp, $imgDecoded);
fclose($fp);
}
return 'src="'.$imgPath.'"';
}, $html);
我能够在以下行中回显图像名称
echo $imgFilename . '.' . $imgExt;
我正在尝试将转换后的图像文件名存储在一个数组中,但我没有成功地这样做。
这是我试过的,在函数
之前初始化一个数组$Images = array();
然后,我试图做以下事情,而不是回应。
$Images[] = $imgFilename . '.' . $imgExt;
但那不起作用,我最终得到空数组
答案 0 :(得分:0)
如果你想在外部范围内使用$ images,你需要像
这样的东西$images = array();
$html = preg_replace_callback("/src=\"data:([^\"]+)\"/", function ($matches) use(&$images) {
//...
$images[] = $imgFilename . '.' . $imgExt;
//...
}
echo implode(', ', $images);