今天给使用 Symfony 的项目装了 FCKeditor 编辑器,配了图片上传。
遇到一些问题,总结下。
安装时,为了简单,最好把解压的 fckeditor 文件夹放在 web/ 目录下。
在模板中加入编辑器很简单:
$webDir = sfConfig::get(‘sf_web_dir’); // DocumentRoot 的服务端路径
$editorInclude = $webDir . “fckeditor/fckeditor.php”;
require_once($editorInclude);
$oFCKeditor = new FCKeditor(‘detail’) ; // form 表单字段名称是 detail
$oFCKeditor->BasePath = ‘/fckeditor/’ ; // 客户端访问编辑器资源文件的路径
$oFCKeditor->Width = ‘100%’; // 宽
$oFCKeditor->Height = ‘100%’; // 高
$oFCKeditor->Value = $articleItem->detail; // $articleItem 是 ORM 对象,直接引用 detail 字段
$oFCKeditor->Config = array(
‘AutoDetectLanguage’ => false, // 关闭浏览器语言自动检测
‘DefaultLanguage’ => ‘zh-cn’ // 设置简体中文
);
$oFCKeditor->Create() ;
设置完了,刷新页面,直接可用!很简单。
已经检查的问题,可以很好地处理 XSS 问题,在编辑器里填写 <script>alert(123)</script> 这样的字符串,都会转义成纯字符,不会被浏览器解析为 HTML 代码。这在编辑器和最终页面都可以正常显示,需要注意的是输出的时候都要加 htmlspecialchars 转义,这是必须养成的习惯!
图片上传的问题。
默认是关闭的,修改 fckeditor/editor/filemanager/connectors/php/config.php 为:
$Config[‘Enabled’] = true;
$Config[‘UserFilesPath’] = ‘/uploads/’; // 这是 Symfony 自动生成的目录。
现在可以上传了,不过会遇到 2 个问题。
问题 1:点击“发送到服务器上”按钮,浏览器 alert 一个错误,显示“Error creating folder “redirect:/index.php” (Can’t create redirect: directory)”。参考了“在symfony中使用FCKeditor上传图片附件” 这篇文章,得到了很好的解决。是 .htaccess 造成的。最简单的办法是在 uploads 目录下再放置一个 .htaccess,关闭 rewrite 即可,内容如下:
Options +FollowSymLinks +ExecCGI
<IfModule mod_rewrite.c>
RewriteEngine Off
</IfModule>
问题 2:上传文件后修改文件名。fckeditor 默认是保留原有文件名。英文名的文件还勉强能用,如果是中文文件名就麻烦了。最好是统一按照自己的命名规则修改文件名。这时编辑 fckeditor/editor/filemanager/connectors/php/io.php,修改一个函数:
function SanitizeFileName( $sNewFileName ) {
$arr = explode(‘.’, $sNewFileName);
$ext = array_pop($arr);
$filename = date(‘Ymd_His_’) . rand(1000, 9999) . ‘.’ . $ext;
return $filename;
}
把原函数改名作为备份。这函数就是保留了扩展名,把主文件名按照日期编码。呃,为了更好地保存文件,其实还应该把扩展名统一大小写,我记得有一个 pathinfo 函数,返回值有一个 extension 字段就是扩展名。其实过程都差不多,您自选吧。
总的说来,fckeditor 给我的感觉是安装简单,功能强大,代码逻辑清晰,便于修改。
赞一个~~
另:推荐一个 Blog
这兄弟很深入地了解 Symfony 框架,我已订阅了他的 RSS,每天学习中……
睡了,晚安……