1

下午好,

我正在尝试使用基于 javascript 的编辑器 (EpicEditor) 来允许我网站上的管理员为博客文章输入降价。单击提交按钮后,编辑器生成的字符串将发送到 Ruby/Rails 服务器,以便通过 RDiscount 处理成 HTML。

它似乎大部分都在工作,除了与 , 空间等有关的东西。单击 EpicEditor 中的“预览”按钮会给出我期望的确切输出,所以我知道这与将字符串发送到服务器的方式有关。我对 ruby​​ 还是很陌生,而且对字符串编码等不太擅长。我相信这对合适的人来说是一个相当简单的问题。

为了说明这个问题 - 只显示代码可能是最好的。我正在尝试在有序列表下方输入项目符号列表。因此,降价将类似于:

1. Hello
2. Goodbye
- a list
- entry
3. For something

我的问题似乎在有序列表条目之后的换行符内和周围。保存到数据库中的字符串以及 javascript 编辑器中的字符串看起来完全一样: "\n - had\n"

然而,在进一步检查中,“工作字符串”(EpicEditor 的预览视图中使用的内容)和“失败字符串”(存储在我的数据库中并通过表单传递的确切字符串)之间存在细微差别:

working_string.each_byte {|c| puts c}
--> 10, 32, 32, 45, 32, 104, 97, 100, 10
failing_string.each_byte {|c| puts c}
--> 10, 194, 160, 32, 45, 32, 104, 97, 100, 10

不知何故/不知何故,一个32字节被更改为194 160. 在进一步的研究中,这似乎是字符串中的常规空格与 a \xC2or的一些问题\xA0,并且(我认为)与 's.

有没有一种简单的方法可以确保字符串从 EpicEditor 正确传递到 rails 服务器,然后再传递到数据库中?如果有帮助的话,我也可以在服务器端使用字符串替换......

谢谢!

更新 1

我通过并试图找到确切的问题。我从 Epiceditor 中抓取了文本,从我从 Epiceditor 镜像的文本区域(与表单一起提交)、通过网络传输的参数以及数据库中的字符串。降价如下(直接从epiceditor文本区域复制:

## Testing this yet again

Because I want more!! More things to have a good time....

1.  Everywhere!
2.  Anywhere!
  - happy place
  - sad place
3.  Goodbye

如果我将其直接粘贴到此输入中,您可以看到它正确呈现:

再次测试这个

因为我想要更多!!更多的事情来度过美好的时光......

  1. 到处!
  2. 任何地方!
    • 快乐的地方
    • 伤心的地方
  3. 再见

该字符串的 ASCII 字符如下:

[35, 35, 32, 84, 101, 115, 116, 105, 110, 103, 32, 116, 104, 105, 115, 32, 121, 101, 116, 32, 97, 103, 97, 105, 110, 10, 10, 66, 101, 99, 97, 117, 115, 101, 32, 73, 32, 119, 97, 110, 116, 32, 109, 111, 114, 101, 33, 33, 32, 77, 111, 114, 101, 32, 116, 104, 105, 110, 103, 115, 32, 116, 111, 32, 104, 97, 118, 101, 32, 97, 32, 103, 111, 111, 100, 32, 116, 105, 109, 101, 46, 46, 46, 46, 10, 10, 49, 46, 32, 32, 69, 118, 101, 114, 121, 119, 104, 101, 114, 101, 33, 10, 50, 46, 32, 32, 65, 110, 121, 119, 104, 101, 114, 101, 33, 10, 32, 32, 45, 32, 104, 97, 112, 112, 121, 32, 112, 108, 97, 99, 101, 10, 32, 32, 45, 32, 115, 97, 100, 32, 112, 108, 97, 99, 101, 10, 51, 46, 32, 32, 71, 111, 111, 100, 98, 121, 101]

我正在通过 exportFile() 将编辑器内容复制到文本区域。该文本区域中的 ASCII 字符如下:

[35,35,32,84,101,115,116,105,110,103,32,116,104,105,115,32,121,101,116,32,97,103,97,105,110,10,10,66,101,99,97,117,115,101,32,73,32,119,97,110,116,32,109,111,114,101,33,33,32,77,111,114,101,32,116,104,105,110,103,115,32,116,111,32,104,97,118,101,32,97,32,103,111,111,100,32,116,105,109,101,46,46,46,46,10,10,49,46,32,160,69,118,101,114,121,119,104,101,114,101,33,10,50,46,32,160,65,110,121,119,104,101,114,101,33,10,160,32,45,32,104,97,112,112,121,32,112,108,97,99,101,10,160,32,45,32,115,97,100,32,112,108,97,99,101,10,51,46,32,160,71,111,111,100,98,121,101]

如果你区分这些数组,我会得到以下信息:

textarea - epiceditor
 => [160, 160, 160, 160, 160] 

换句话说, exportFile() 中的 EpicEditor 似乎仍然输出了额外的 '。关于这可能来自哪里的任何想法?我完成镜像如下:

var post_body = $("#post_body");
var content = post_body.val();

var editor = new EpicEditor(opts);

editor.on('load', function () {
  editor.importFile(window.location.href, content); //Imports a file when the user clicks this     button
}); 

editor.on('save', function () {
  post_body.val(editor.exportFile());
});

更新 2

PS 以下修复了 exportFile() 输出。我很高兴至少我已经弄清楚了,但我希望能得到一些与 EpicEditor 原生兼容的东西!

bad = "#{194.chr}#{160.chr}".force_encoding('utf-8')
good = 32.chr
self.body = body.gsub(bad, good)
4

0 回答 0