Ruby Markdown / String Processing - 编码问题?

时间:2012-07-16 21:08:05

标签: ruby-on-rails ruby string encoding markdown

下午好,

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

除了与 ,空格等有关的事情之外,它似乎主要起作用。单击EpicEditor中的“预览”按钮可以提供我期望的确切输出,因此我知道这与字符串发送到服务器的方式有关。我对红宝石仍然相当新,而且对于字符串编码也不是很好。我相信对于合适的人来说这是一个相当简单的问题。

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

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个字节。在进一步的研究中,对于\xC2\xA0而言,这似乎与字符串中的常规空间存在一些问题,并且与 的某些事情有关(我认为)

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

谢谢!

更新1

我经历过并试图找到确切的问题。我抓住了Epiceditor的文本,从我从Epiceditor镜像的textarea(提交表单),通过电线的参数和数据库中的字符串。降价如下(直接从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. 再见
  4. 此字符串的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()将编辑器内容复制到textarea。 textarea中的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

    P.S。以下修复了exportFile()输出。我很高兴至少我已经弄明白了,但我希望得到一些与EpicEditor本身有效的东西!

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

0 个答案:

没有答案