4

我有一个经典的 ASP 页面,它具有 jquery 功能并且上面有 TinyMCE 编辑器。我希望能够对编辑器进行拼写检查,但我看到的每个示例都是使用 PHP 或 ASP.net。

我遇到了这个页面:http ://achorniy.wordpress.com/2009/08/11/tinymce-spellchecker-in-java/但我不熟悉 SVN,所以我不确定如何遵循步骤,我读过它可能不适用于 IE。

还有其他选项可以检查我的 tinymce 编辑器的拼写吗?

非常感谢您的帮助。

4

4 回答 4

4

首先,我不确定这是否可以捎带 SG 86 的答案,所以如果不是,请不要责备我......

我用SG 86的例子,发现你无法直接使用TinyMCE提供的拼写检查功能,但是如果你使用论坛用户提供的hack,它确实可以成功。

  1. 安装和设置 TinyMCE
  2. 按照论坛用户的说明进行操作

TinyMCE 这个解决方案的所有功劳都应该归于原始论坛用户@ http://tinymce.com/forum/viewtopic.php?id=15662


我建议首先设置 googiespell 以使用带有 asp 的简单文本区域:googiespell 在这里:http ://orangoo.com/labs/GoogieSpell/

asp 脚本是 James Newtons 在此页面上的 ASP 代理:http: //orangoo.com/labs/GoogieSpell/Documentation/ 所以一旦你得到这个工作,这里就是你如何在你的 javascript 设置中将它与 TinyMCE 集成拼写检查器配置:

<script language="javascript">

tinyMCE.init({
    theme : "advanced",
    mode : "textareas",
    plugins : "spellchecker",
    theme_advanced_buttons3_add : "spellchecker",
    spellchecker_rpc_url : "/googiespell/spell.asp",
    spellchecker_languages : "+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv"
});

</script>

编辑该行:

   spellchecker_rpc_url : "/googiespell/spell.asp",

指向您的 spell.asp 文件在您的应用程序中的位置

将 spell.asp 的内容替换为以下代码:

<%

Dim ByteCount, BinRead
ByteCount = Request.TotalBytes
BinRead = Request.BinaryRead(ByteCount)
rawData = RSBinaryToString(BinRead)

'get language
if instr(rawData, """params"":[""") > 1 then
    lang = mid(rawData, InStr(rawData,"[")+2, 2)
else
    lang = "en"
end if

if instr(rawData, """method"":""checkWords"",") > 1 then
'return mispelled words
 json = mid(rawData, InStrRev(rawData,"["))
 json = mid(json, 1, instr(json, "]"))
 json = replace(json, """,""", " ")
 json = replace(json, """", "")
 t = json

    r = "<?xml version=""1.0"" encoding=""utf-8"" ?><spellrequest textalreadyclipped=""0"" ignoredups=""0"" ignoredigits=""1"" ignoreallcaps=""1""><text>"_
        &t&"</text></spellrequest>"

    r = getURL("https://www.google.com/tbproxy/spell?lang="&lang, r, "","")
    out = "{""id"":null,""result"":["
    wrds = ""
    for each c in filter(split(r,"<c "),"</c>")
        'response.write "<br>"&server.htmlencode(c)
        o = cint(split(split(c,"o=",2)(1),"""")(1))+1
        l = cint(split(split(c,"l=",2)(1),"""")(1))
        s = cint(split(split(c,"s=",2)(1),"""")(1))
        out = out & """" & mid(t,o,l)& """, " 
        wrds = "1"
    next
    if wrds = "" then
        out = "{""id"":null,""result"":[],""error"":null}"
    else
        out = mid(out, 1, len(out)-2) & "],""error"":null}"
    end if

    response.write out
    response.end

else
 'return single word corrections
 json = mid(rawData, InStrRev(rawData,"["))
 json = mid(json, 1, instr(json, "]"))
 json = replace(json, """,""", " ")
 json = replace(json, "en ", "")
 json = replace(json, """", "")
 t = json

    r = "<?xml version=""1.0"" encoding=""utf-8"" ?><spellrequest textalreadyclipped=""0"" ignoredups=""0"" ignoredigits=""1"" ignoreallcaps=""1""><text>"_
        &t&"</text></spellrequest>"

    r = getURL("https://www.google.com/tbproxy/spell?lang="&lang, r, "","")

    for each c in filter(split(r,"<c "),"</c>")
        'response.write "<br>"&server.htmlencode(c)
        o = cint(split(split(c,"o=",2)(1),"""")(1))+1
        l = cint(split(split(c,"l=",2)(1),"""")(1))
        s = cint(split(split(c,"s=",2)(1),"""")(1))
        c = textbetween(">", c, "<")
        '{"id":null,"result":["Titmice","Times","Tines","Tinnies","Timmy\'s"],"error":null}
        out =  "{""id"":null,""result"":["
        wrds = ""
        for each w in split(c,vbTab)
            out = out & """" & w & """, "
            wrds = "1"
        next
        if wrds = "" then
            out = "{""id"":null,""result"":[],""error"":null}"
        else
            out = mid(out, 1, len(out)-2) & "],""error"":null}"
        end if
    next
    response.write out
    response.end
end if

 if t=empty then t = request.form()    'GoogieSpell is going to put the text in the POST data.

'show the reply from google for the POST data.     
 response.write getURL("https://www.google.com/tbproxy/spell?lang="&lang, t, "","")



Function TextBetween(sThis, sAnd, sThat)
    on error resume next
    TextBetween = split(split(sAnd,sThis,2,1)(1),sThat,2,1)(0)
end function

Function RSBinaryToString(xBinary)
  Dim Binary
  If vartype(xBinary)=8 Then Binary = MultiByteToBinary(xBinary) Else Binary = xBinary
  Dim RS, LBinary
  Const adLongVarChar = 201
  Set RS = CreateObject("ADODB.Recordset")
  LBinary = LenB(Binary)

  If LBinary>0 Then
    RS.Fields.Append "mBinary", adLongVarChar, LBinary
    RS.Open
    RS.AddNew
    RS("mBinary").AppendChunk Binary
    RS.Update
    RSBinaryToString = RS("mBinary")
  Else
    RSBinaryToString = ""
  End If
End Function

function getURL(aURL, anyPostData, anyUserName, anyPassword) 
DIM objSrvHTTP,web,method,s
    on error resume next
    s=""
    set objSrvHTTP = Server.CreateObject ("Msxml2.ServerXMLHTTP.3.0")
    if anyPostData=empty then
        objSrvHTTP.open "GET",aURL, true, anyUsername, anyPassword
    else
        objSrvHTTP.open "POST",aURL, true, anyUsername, anyPassword
        objSrvHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    end if
    objSrvHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)"
    objSrvHTTP.send anyPostData
    objSrvHTTP.waitForResponse 7
    select case objSrvHTTP.readyState
        case 0 'object created, but no URL opened
            debug "getURL("&aURL&", "&anyPostData&", "&anyUserName&", "&anyPassword&"): Object Created, no URL opened"
            err.raise 1, "Object Created, no URL opened"
            exit function
        case 1    'loading: URL opened, but no data sent
            debug "getURL("&aURL&", "&anyPostData&", "&anyUserName&", "&anyPassword&"):URL opened, no data sent"
            err.raise 2, "URL opened, no data sent"
            exit function
        case 2    'loaded: data sent, status and headers available, no response recieved.
            debug "getURL("&aURL&", "&anyPostData&", "&anyUserName&", "&anyPassword&"):No response from remote host"
            err.raise 3, "No response from remote host"
            exit function
        case 3    'interactive: some data recieved. responseBody and responseText will return partial results.
            debug "getURL("&aURL&", "&anyPostData&", "&anyUserName&", "&anyPassword&"):Partial response recieved:"
            debug server.htmlencode(objSrvHTTP.responseText)
            s = objSrvHTTP.responseText
            err.raise 4, "Partial response recieved"
        case 4    'complete: 
            s = objSrvHTTP.responseText
        end select
    getURL = s
end function

%>

编辑 - 为了清楚起见,添加了我的标题:

<script type="text/javascript" src="tinymce/jscripts/tiny_mce/tiny_mce.js" ></script>
<script type="text/javascript">
tinyMCE.init({
    mode : "textareas",
    theme : "advanced",
    plugins : "spellchecker",
    theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,undo,redo,|,copy,paste,|,spellchecker",
    theme_advanced_buttons2 : "",
    theme_advanced_buttons3 : "",
    spellchecker_rpc_url : "googiespell/spell.asp",  <--! Needs to point to where the spell.asp script is located on your server. -->
    spellchecker_languages : "+English=en,Spanish=es"
});

</script>
于 2012-04-11T21:02:07.233 回答
1

只需使用插件拼写检查器

http://www.tinymce.com/wiki.php/Plugin:spellchecker

于 2012-04-11T15:38:39.427 回答
0

问题中提到的JSpellChecker(http://achorniy.wordpress.com/2009/08/11/tinymce-spellchecker-in-java/)为TinyMCE和使用示例提供了一些拼写检查器的实现,但它们都是基于java的实现(所以你需要做一些额外的步骤才能让它在你的环境中工作)

它应该可以在 IE 上正常工作,但理想情况下,它应该托管在与您要使用它的页面相同的主机上,因为浏览器(不仅是 IE)可能会阻止跨域 ajax 请求。

如果您不想处理 SVN,可以在此处下载代码快照 ( http://sourceforge.net/p/jspellchecker/code/11/tarball )。它还包含使用示例

于 2013-05-27T14:16:36.323 回答
-1

TinyMCE 提供

spellchecker_rpc_url : "/myspellchcker",  
<--! Needs to point to where the myspellchecker script is located on your server. -->

这是 Python 代码(在 ASP 中编写等效代码):

  #checker is a pyenchant object - uses enchant which wraps aspell in our case . The code was taken from django's implementation for tinymce spellchecker.

  def spell_check(self):
        """Returns a Response that implements the TinyMCE spellchecker protocol.
        """
        try:
            raw = self.REQUEST['BODY']
            input = json.loads(raw)
            id = input['id']
            method = input['method']
            params = input['params']
            lang = params[0]
            arg = params[1]

            if not enchant.dict_exists(str(lang)):
                raise Exception("dictionary not found for language '%s'" % lang)

            checker = self.checker 
            if method == 'checkWords':
                result = [word for word in arg if not checker.check(word)]
            elif method == 'getSuggestions':
                result = checker.suggest(arg)
            elif method == 'learnWord' :
                result = checker.add(arg)
            else:
                raise Exception("Unkown spellcheck method: '%s'" % method)
            output = {
                'id': id,
                'result': result,
                'error': None,
            }
        except Exception:
            return Exception("Error running spellchecker")
        self.REQUEST.RESPONSE.setHeader('Content-Type','application/json')
        return json.dumps(output)
于 2014-02-09T08:10:54.803 回答