summernote在线编辑器提交的内容PHP处理其中图片函数
|
《summernote在线编辑器提交的内容PHP处理其中图片函数》要点: 相关主题:PHP开发 / summernote在线编辑器 在PHP服务器端,接收到表单中的summernote编辑器数据,需要对其中的图片处理,主要是实现: 1、base64图片处理。 2、空行清理,XSS过滤。 本函数主要是实现功能1,也可以整合功能2,详见参数说明 下面函数说明: 1、mkdirs($imgUploadPath) 是递归创建目录函数,如果不会用到递归多层目录,那么你也可以用mkdir()来代替。 2、常量 WEBROOT 是网站根目录,可以替换成你自己的常量。 3、RemoveXSS()函数是移除XSS,需要改成你自己的。 返回值: 1、直接引用内容所在的内存地址,因此不依靠返回值。调用了函数后,内容会被变更 2、返回值是返回处理了base64的图片后,在服务器本地保存的http路径。可能是“/”路径开头的,也可能是http://开头的。 调用示例: $re = summernoteEditor($content, $this->imgUpPath, $this->imgHttpPath, false); #其中$re数组保存了处理过base64的图片,包含路径,如果没有处理,则为空数组。$content因地址绑定,后续调用都是处理过的值。 函数代码: /** 脚本之家php前端summernote编辑器上传内容处理:1、base64图片处理,2、XSS过滤
* 来源: http://www.jb51.cc 脚本之家php培训
* 转发请保留网址,尊重别人劳动成果,谢谢!
* @param $content 上传的内容
* @param bool $imgUploadPath 图片上传物理路径,如M:/web/web1/uploads/.... 如果不提供,则不保存base64上传的图片
* @param bool $imgHttpPath 图片的http路径,如果不提供,则不保存base64上传的图片
* @param bool $isClearEmpty 是否处理XSS和空行清理。如果后面用到其它同样功能处理函数,就不需要清理,设置为false
* @param array 返回处理后的图片数组,每列是 最后保存的路径+图片名:
*/
function summernoteEditor(&$content , $imgUploadPath='' ,$imgHttpPath = '' , $isClearEmpty = true)
{
$summernoteUpPics = []; //经本函数处理的图名最后路径
if(empty($content)) return $summernoteUpPics;
preg_match_all('#<img [^>]*srcs*=s*['"]?([^'"]+)['"]?[^>]*>#is',$content,$m);
if(!empty($m)){
$allowUpload = (!empty($imgUploadPath) && !empty($imgHttpPath));
if($allowUpload){
$imgUploadPath = rtrim($imgUploadPath,'/').'/';
$imgHttpPath = rtrim($imgHttpPath,'/').'/';
}
foreach ($m[1] as $k=>$img){
//保存base64字符串为图片 ......
if (preg_match('/^/', $img, $imginfo))
{
$type = $imginfo[1];
$newImgName = date('YmdHis').random(2).random(2).'.'.$type;
$imgContent = str_replace($imginfo[0], '', $img);
//检查内容是否符合base64格式,
if (!preg_match('/^[a-zA-Z0-9+/=]+$/', $imgContent)) {
$content = str_replace($m[0][$k],'',$content); //替换掉
continue;
}
if(!is_dir($imgUploadPath)) mkdirs($imgUploadPath); //创建目录
if($allowUpload && file_put_contents($imgUploadPath.$newImgName, base64_decode($imgContent)) ){
$httpImgPath = $imgHttpPath.$newImgName;
$content = str_replace($img, $httpImgPath ,$content); //替换掉base64
$summernoteUpPics[] = $httpImgPath;
}else{
$content = str_replace($m[0][$k],$content); //保存失败就清除掉图片
}
}
elseif (preg_match('#^https?://[a-zA-Z0-9_-.?/]+#is', $imginfo)) //正常图片不处理:远程的另有采集处理
{
continue;
}
elseif(!file_exists(WEBROOT.ltrim($img,'/')))
{ //不存在的非正常图片,不是网址,也不是base64,也不在服务器上已存在的(内容编辑时原有图片),就替换掉。
$content = str_replace($m[0][$k],$content);
}
}
}
if(!$isClearEmpty) return $summernoteUpPics ;
//移除空行
if(!empty($content)) $content = preg_replace('#^(?:s*<p>s*(<br[^<>]*>s*)+s*</p>s*)+#is', $content);
if(!empty($content)) $content = preg_replace('#(?:s*<p>s*(<br[^<>]*>s*)+s*</p>s*)+$#is',$content); //清理前后的空行
$content = trim($content);
//移除xss
if( !empty($content)) $content = RemoveXSS($content, false, true, '');
return $summernoteUpPics ;
} (编辑:鄂州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- php遍历替换目录下文件指定内容的方法
- PHP自定义函数判断是否为Get、Post及Ajax提交的方法
- Laravel框架用户登陆身份验证实现方法详解
- PHP教程:php批量转换文件夹下所有文件编码的函数类
- php+redis在实际项目中HTTP 500: Internal Server Error故障
- Laravel 5.4中migrate报错: Specified key was too long er
- PHP学习:PHP API接口必备之输出json格式数据示例代码
- php实现连接access数据库并转txt写入的方法
- PHP实例:PHP面向对象中new self()与 new static()的区
- PHP聚合式迭代器接口IteratorAggregate用法分析
