下午好,
我正在尝试使用基于 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 \xC2
or的一些问题\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
如果我将其直接粘贴到此输入中,您可以看到它正确呈现:
再次测试这个
因为我想要更多!!更多的事情来度过美好的时光......
- 到处!
- 任何地方!
- 快乐的地方
- 伤心的地方
- 再见
该字符串的 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)