locked
FCKeditor 获取图片路径 RRS feed

  • Question

  •  版主注:微软不对FCKEditor提供技术支持。寻求FCKEditor支持的应该去官方论坛 http://cksource.com/forums/

    我想在后台用FCKEditor发布文章,在上传图片后,想设置成“图片新闻”之类的.

    我想问一下如何获取上传图片的路径,以便写进数据库?

    在以前的ASP中,我用过eWebEditor能够实现,它有个隐藏域能得到图片的路径。

    我在网上找了很久,都说FCKEditor没有这样的功能,只能用正则表达式处理编辑区域的Html代码,来获取图片的路径。

    但是又有个问题:

    在FCKEditor中上传一个图片文件后生成的代码是这样的:

    <input type="image" height="130" width="970" src="/upfile/example.jpg" />

    而一般的图片代码是这样的:

    <img alt="" src="/upfile/example.jpg"/>

    那么这个正则表达式该怎么写,才能获得路径名:/upfile/example.jpg   ??

    先谢了!


    • Moved by Sheng Jiang 蒋晟 Wednesday, February 25, 2009 9:19 PM 非微软产品使用问题 (从 Visual C# 移动到 一般性问题讨论区)
    • Edited by Sheng Jiang 蒋晟 Monday, March 21, 2011 9:37 PM 非微软产品
    • Moved by Sheng Jiang 蒋晟 Friday, May 13, 2011 4:35 PM (From:一般性问题讨论区)
    Thursday, May 8, 2008 6:46 PM

Answers

  •  

    1,首先,FCKeditor 虽然很有名,但不是属于微软的产品,并不是每个人都要用到它。本机测试需要搭配环境的。

     

    2,从http://www.fckeditor.net/demo看,插入的图片是img标记,这也是 Web 开发人员通用的常识。

     

    3,不知道你下载的是哪个版本,如果你认为你的代码出现了这样的问题,请将你的可以运行的最精简的代码(指与数据库代码、自己写的各种类无关,拿来就能测试的代码)发来,我倒是可以看看是否真是这样的结果。

     

    4,关于正则,网上有很多各种各样的代码,不知道你尝试过搜索没有

    http://www.google.cn/search?q=%E6%AD%A3%E5%88%99+%E5%BE%97%E5%88%B0%E5%9B%BE%E7%89%87%E5%9C%B0%E5%9D%80&rls=com.microsoft:zh-cn:IE-SearchBox&ie=UTF-8&oe=UTF-8&sourceid=ie7&rlz=1I7ADBF

     

     

     

     

     

    Sunday, June 1, 2008 2:51 AM
  •  我重新写了一下这块,完美解决了你的问题:

    1 function $(_id){  
    2     return document.getElementById(_id);  
    3 }  
    4  
    5 function getDomainName(){  
    6     var host = window.location.hostname;  
    7     var port = window.location.port;  
    8  
    9     var domainName = "http://" + host;  
    10     if(port != ""){  
    11         domainName += ":" + port;  
    12     }  
    13     return domainName;  
    14 }  
    15  
    16 function FCKeditor_OnComplete(editorInstance){  
    17     editorInstance.Events.AttachEvent('OnBlur', onEditorBlur);  
    18 }  
    19  
    20 function onEditorBlur(){  
    21     try{  
    22         var combox = $('Images');  
    23         var comboxSelectedIndex = combox.selectedIndex;  
    24         var newDom = document.createElement('span');  
    25         var oEditor = FCKeditorAPI.GetInstance("content");  
    26         newDom.innerHTML = oEditor.GetXHTML(true);  
    27         var imgSrcs = newDom.getElementsByTagName('img');  
    28           
    29         combox.length = 1;  
    30         for(i=0; i<imgSrcs.length; i++){  
    31             $('Images').options[i+1] = new Option(imgSrcs[i].src.replace(getDomainName(), ''), imgSrcs[i].src.replace(getDomainName(), ''));  
    32         }  
    33         combox.selectedIndex = comboxSelectedIndex;  
    34     }catch(e){}  
    35 }  
    36  

    你可能还会有更好的建议,欢迎及时提出来. http://mydodu.spaces.live.com/
    我先为人人,人人再为我!
    人要诚实!还要踏实!
    • Proposed as answer by Dodu.NET Wednesday, February 25, 2009 2:49 AM
    • Marked as answer by Johnny Qian Tuesday, September 15, 2009 5:20 AM
    Wednesday, February 25, 2009 2:49 AM

All replies

  •  

    <input type="image" 一般是提交按钮。一般的图片显示是img。FCKEditor也不会是使用<input>来做图片显示的吧。

    如果你会img 的正则,将里面的img改成input即可,

    村数据库一般是在上传的代码里加处理的,FCKEditor默认是按文件系统存储的,加数据库要自己写代码

     

    Friday, May 9, 2008 12:33 AM
  •  孟宪会 写:

     

    <input type="image" 一般是提交按钮。一般的图片显示是img。FCKEditor也不会是使用<input>来做图片显示的吧。

    如果你会img 的正则,将里面的img改成input即可,

    村数据库一般是在上传的代码里加处理的,FCKEditor默认是按文件系统存储的,加数据库要自己写代码

     

     

    FCKEditor中生成的图片代码真的是用提交按钮,大哥试一下就知道了。

    而有的时候我们编辑文章会从别的网页Copy过来,这样代码里的图片代码是<img src=" ">之类的。

    正则表达式我不会,又有上面的问题。

    谢谢孟宪会大哥。希望高手继续指导啊 。

    Friday, May 9, 2008 4:16 PM
  • 为什么这么久了,还没人回答啊??难道这个问题解决不了啊?有点失望啊。。。。

     

    Saturday, May 31, 2008 5:50 PM
  •  

    1,首先,FCKeditor 虽然很有名,但不是属于微软的产品,并不是每个人都要用到它。本机测试需要搭配环境的。

     

    2,从http://www.fckeditor.net/demo看,插入的图片是img标记,这也是 Web 开发人员通用的常识。

     

    3,不知道你下载的是哪个版本,如果你认为你的代码出现了这样的问题,请将你的可以运行的最精简的代码(指与数据库代码、自己写的各种类无关,拿来就能测试的代码)发来,我倒是可以看看是否真是这样的结果。

     

    4,关于正则,网上有很多各种各样的代码,不知道你尝试过搜索没有

    http://www.google.cn/search?q=%E6%AD%A3%E5%88%99+%E5%BE%97%E5%88%B0%E5%9B%BE%E7%89%87%E5%9C%B0%E5%9D%80&rls=com.microsoft:zh-cn:IE-SearchBox&ie=UTF-8&oe=UTF-8&sourceid=ie7&rlz=1I7ADBF

     

     

     

     

     

    Sunday, June 1, 2008 2:51 AM
  •  

    非常感谢!
    Monday, June 2, 2008 4:40 PM
  •  
    function $(_id){  
        return document.getElementById(_id);  
    }  
     
    function FCKeditor_OnComplete( editorInstance ) {  
        editorInstance.Events.AttachEvent( 'OnBlur', onEditorBlur );  
    }  
     
    function onEditorBlur(){  
        var oEditor = FCKeditorAPI.GetInstance("content");  
        var a = oEditor.GetXHTML(true);  
        var pattern = /<IMG.*?>/ig;  
        var myArray = pattern.exec(a);  
     
        $('Images').length = 1;  
        for(i=0;i<myArray.length;i++){  
            var newDom = document.createElement('span');  
            newDom.innerHTML = myArray[i];  
            var srcStr = newDom.getElementsByTagName('img');  
            $('Images').options[i+1] = new Option(srcStr[0].src, srcStr[0].src);  
        }  

    这是我自己写的,页面上需要一个ID为Images的Select.
    这时候获取到的路径是带有域名信息的(例如:http://localhost/upfile/example.jpg).
    你可以改进一下,把图片的路径信息中含有的域名信息去掉.
    人要诚实!还要踏实!
    • Proposed as answer by Dodu.NET Wednesday, February 25, 2009 2:42 AM
    Tuesday, February 24, 2009 3:39 PM
  •  我重新写了一下这块,完美解决了你的问题:

    1 function $(_id){  
    2     return document.getElementById(_id);  
    3 }  
    4  
    5 function getDomainName(){  
    6     var host = window.location.hostname;  
    7     var port = window.location.port;  
    8  
    9     var domainName = "http://" + host;  
    10     if(port != ""){  
    11         domainName += ":" + port;  
    12     }  
    13     return domainName;  
    14 }  
    15  
    16 function FCKeditor_OnComplete(editorInstance){  
    17     editorInstance.Events.AttachEvent('OnBlur', onEditorBlur);  
    18 }  
    19  
    20 function onEditorBlur(){  
    21     try{  
    22         var combox = $('Images');  
    23         var comboxSelectedIndex = combox.selectedIndex;  
    24         var newDom = document.createElement('span');  
    25         var oEditor = FCKeditorAPI.GetInstance("content");  
    26         newDom.innerHTML = oEditor.GetXHTML(true);  
    27         var imgSrcs = newDom.getElementsByTagName('img');  
    28           
    29         combox.length = 1;  
    30         for(i=0; i<imgSrcs.length; i++){  
    31             $('Images').options[i+1] = new Option(imgSrcs[i].src.replace(getDomainName(), ''), imgSrcs[i].src.replace(getDomainName(), ''));  
    32         }  
    33         combox.selectedIndex = comboxSelectedIndex;  
    34     }catch(e){}  
    35 }  
    36  

    你可能还会有更好的建议,欢迎及时提出来. http://mydodu.spaces.live.com/
    我先为人人,人人再为我!
    人要诚实!还要踏实!
    • Proposed as answer by Dodu.NET Wednesday, February 25, 2009 2:49 AM
    • Marked as answer by Johnny Qian Tuesday, September 15, 2009 5:20 AM
    Wednesday, February 25, 2009 2:49 AM
  • 我最亲爱的兄弟,那是因为你点错了按钮 ,如图所示:http://www.justxd.com.cn/userfiles/image/123333333/Snap2.gif

    第一个按钮是插入图像欲,第二个按钮是插入图像,如果你在插入图片的时候是点的第一个按钮,生成的代码自然是<input>,如果选择插入图像,生成的代码就是<img>的了。

    此问题解决。
    请多指教,多谢!
    Saturday, October 24, 2009 9:31 AM
  • 这是什么解答,版主没有敬业精神
    Saturday, October 24, 2009 9:32 AM
  • 成熟的编辑器还用重写吗,除非你是想添加自定义的按钮
    Saturday, October 24, 2009 9:33 AM
  • dijiaxin,微软不对非微软软件提供技术支持。你可以去http://cksource.com/forums/找官方的技术支持。



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    Monday, March 21, 2011 9:36 PM